我在这个意义上使用 NSCondition 类:
- (void) method1
{
[[cocoaCondition lock] lock];
while (!someCheckIsTrue) {
[cocoaCondition wait];
}
// Do something.
[cocoaCondition unlock];
}
- (void) method2
{
[cocoaCondition lock];
// Do something.
someCheckIsTrue = YES;
[cocoaCondition signal];
[cocoaCondition unlock];
}
我有两个线程,thread1 运行method1,thread2 运行method2。我希望当[cocoaCondition wait]
被调用时,thread1会被阻塞。然后当 thread2 调用时[cocoaCondition signal]
,thread1 将恢复运行。我已经测试了代码,它就像我希望的那样工作。
但是,如您所见,当代码运行时:
第1步,thread1调用:[cocoaCondition lock]
(Apple doc说:尝试获取锁,阻塞线程的执行直到可以获取锁)
第2步,线程1调用:[cocoaCondition wait]
第3步,线程2调用:([cocoaCondition lock]
按照苹果的文档,线程2应该被阻塞)
第4步,线程2调用:([cocoaCondition signal]
所以,线程2应该被阻塞,直到被调用才能调用这个方法[cocoaConditon unlock]
)
我认为我的代码死锁了,但为什么不呢?所以我猜当thread1调用第2步时cocoaCondition被解锁了[cocoaCondition wait]
,是吗?