为bool实现CompareAndSwap

use*_*ser 5 c# boolean compare-and-swap

在.NET框架中,原子操作CompareAndExchange仅对定义int,long,double和引用类型.但我需要CompareAndExchange bool类型.我怎样才能实现CompareAndSwapbool

das*_*ght 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) ...
    ...
}
Run Code Online (Sandbox Code Playgroud)