我正在尝试保护一些多线程代码,并且我正在添加单元测试以证明我已经修复了我们以前见过的损坏。
这样做虽然我遇到了一些意想不到的行为。当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?!
答案 0 :(得分:7)
答案 1 :(得分:3)
除非我在问题中遗漏了某些内容,否则这两个调用都不应该成功,因为它们是从同一个线程制作的?
因此,如果你是从不同的线程中创建的,我会期望第二个失败。