5

.NET フレームワークでは、アトミック操作CompareAndExchangeintは、 、longdoubleおよび参照型に対してのみ定義されています。しかし、型には CompareAndExchange が必要ですbool。に実装するにはどうすればよいCompareAndSwapですboolか?

4

2 に答える 2

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) ...
    ...
}
于 2013-06-30T17:25:12.363 に答える
1

dablinkenlight のアプローチに代わる方法は、Int32オーバーロード where 0isfalseおよびゼロ以外の値 isを使用することですtrue

于 2013-06-30T17:50:55.007 に答える