在.NET框架中,仅为int
,long
,double
和引用类型定义原子操作CompareAndExchange。但我需要{A {1}}类型的CompareAndExchange。如何为bool
实施CompareAndSwap
?
答案 0 :(得分:6)
您可以定义包装器布尔值,并对CompareExchange
使用T where T : class
重载,如下所示:
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) ...
...
}
答案 1 :(得分:1)
dablinkenlight方法的替代方法是使用Int32
重载0
为false
且任何非零值为true
。