我正在尝试确保一些多线程代码的安全,并且正在添加单元测试以证明我已修复了以前看到的损坏。

尽管这样做我遇到了一些意外的行为。为什么当the docs指示TryEnter仅在函数已获得排他锁时才返回true,所以以下代码为何成功?

const int msToWaitForLock = 1;
Object^ syncObj = gcnew Object();
bool gotLock = Threading::Monitor::TryEnter(syncObj, msToWaitForLock); // <-- this succeeds as expected
bool gotSecondLock = Threading::Monitor::TryEnter(syncObj, msToWaitForLock); // <-- but why the heck does this succeed?!

最佳答案

文件说



参见http://msdn.microsoft.com/en-us/library/de0542zz(v=vs.110)

08-17 08:19