5

在 .NET 框架中,原子操作CompareAndExchange 仅为 、引用int类型定义。但我需要 CompareAndExchange 的类型。我该如何实施?longdoubleboolCompareAndSwapbool

4

2 回答 2

6

您可以定义包装布尔值,并使用CompareExchange重载 for 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) ...
    ...
}
于 2013-06-30T17:25:12.363 回答
1

dablinkenlight 方法的替代方法是使用Int32重载 where 0isfalse和任何非零值 is true

于 2013-06-30T17:50:55.007 回答