- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 .NET 框架中,原子操作 CompareAndExchange仅为 int
、long
、double
和引用类型定义。但是我需要 bool
类型的 CompareAndExchange。如何为 bool
实现 CompareAndSwap
?
最佳答案
您可以定义包装器 boolean 值,并为 T where T : class
使用 CompareExchange
重载,如下所示:
private static object TrueObj = true;
private static object FalseObj = false;
...
object val = TrueObj;
object result = Interlocked.CompareExchange(ref val, TrueObj, FalseObj);
if (val == FalseObj) { // Alternatively you could use if (!(bool)val) ...
...
}
关于c# - 为 bool 实现 CompareAndSwap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392880/
为什么 CompareAndSwap 指令被认为是昂贵的? 我在一本书中读到: “内存障碍很昂贵,大约 昂贵的原子 compareAndSet() 操作说明。” 谢谢! 最佳答案 “CAS 与普通存储
假设一些“N”个线程正在尝试 CAS 一个 AtomicInteger 变量,是否保证 CAS 必须恰好一个线程成功? 是否有可能所有“N”个线程都尝试失败? 最佳答案 compareAndSet 旨
这个问题不是关于它们之间的区别——我知道什么是虚假故障以及为什么它会发生在 LL/SC 上。我的问题是,如果我使用的是 intel x86 并使用 java-9(内部版本 149),为什么它们的汇编代
大多数不安全操作都接受内存位置来执行操作 - 例如: Unsafe unsafe = Context.unsafe; long position = unsafe.allocateMe
不是作业,是为了考试而学习。 我对问题陈述的最佳尝试: 假设一个线程调用 AtomicIncrement,传递一个指向共享整型变量的指针。没有指定另一个线程是否会修改这个变量,但这是可能的。这种比较和
在 .NET 框架中,原子操作 CompareAndExchange仅为 int、long、double 和引用类型定义。但是我需要 bool 类型的 CompareAndExchange。如何为 b
请考虑以下 CompareAndSwap 代码,让我知道为什么这个原子指令比原子 TestAndSet 更强大,因为它是一个互斥原语? char CompareAndSwap(int *ptr, in
我知道CompareAndSwap是在java并发中的AtomicInteger.incrementAndGet()等方法的底层使用的,它的工作原理就像无限循环,直到成功并阻塞它的线程 It comp
我决定使用不同的锁定策略来衡量增量,并为此目的使用 JMH。我正在使用 JMH 检查吞吐量和平均时间以及检查正确性的简单自定义测试。有六种策略: 原子计数 读写锁定计数 与 volatile 同步 没
我是一名优秀的程序员,十分优秀!