Rob*_*don 7 c# multithreading locking
所以这是我的双重检查锁定的自定义实用程序:它是一个静态方法,您可以在其中提供标准,同步对象和要执行的操作.
public static bool RunIf(Func<bool> criterion, object syncObject, Action action)
{
if (criterion())
lock(syncObject)
if (criterion())
{
Thread.MemoryBarrier();
action();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我了解到,根据C#规范,优化器可以以这样的方式重新排序内存分配:在没有内存障碍的情况下,这种技术可以给出误报并在不应该执行时执行操作.
在我的小世界中,如果这种失败是可能的,那么还应该可以设计一个测试,通过足够多的并行测试用例来充分地使用场景来证明失败.我一直在寻找这样的测试大约一年,但到目前为止,我已经画了一个空白.谁能告诉我一个测试:
表明在没有记忆障碍的情况下该方法的失败;
当内存屏障恢复重复测试时,它显示了它的成功吗?