为bool实现CompareAndSwap

时间:2013-06-30 17:17:43

标签: c# boolean compare-and-swap

在.NET框架中,仅为intlongdouble和引用类型定义原子操作CompareAndExchange。但我需要{A {1}}类型的CompareAndExchange。如何为bool实施CompareAndSwap

2 个答案:

答案 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重载0false且任何非零值为true