我使用NSCondition类在此SENCE: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];
}
我有两个线程,线程1运行方法1及线程运行的方法2。我希望当调用[cocoaCondition wait]
时,线程1将被阻塞。然后,当thread2调用[cocoaCondition signal]
时,thread1将继续运行。我已经测试了代码,并且正如我所希望的那样工作。
但是,正如你看到的,当代码运行:
步骤1中,线程1调用:[cocoaCondition lock]
(苹果医生说:试图获取一个锁,阻塞线程的执行,直到锁可收购)
步骤2中,线程1调用:[cocoaCondition wait]
步骤3中,线程2调用:[cocoaCondition lock]
(继苹果的doc,该线程2应被阻止)
步骤4中,线程2调用:[cocoaCondition signal]
(所以,线程2应该被阻塞,可以” t调用这个方法直到[cocoaConditon unlock]
被称为)
我想我的代码是死锁的,但为什么不呢? 所以我猜可可条件是解锁当thread1在步骤2调用[cocoaCondition wait]
,是吗?
为什么你需要while循环?你不能等待,然后一旦信号被称为等待将退出? – jjxtra 2012-12-12 19:58:40
@jjxtra来自Apple的NSCondition doc:“由于信令的工作方式,布尔谓词是使用条件的语义的一个重要部分,发送条件并不能保证条件本身是真实的。可能会导致出现错误信号。“ – Gobe 2016-06-03 18:22:22