我正在使用NSCondition类,用于以下情况:
我有两个线程,线程1运行方法1,线程2运行方法2。我希望当调用时,线程1会被阻塞。然后当线程2调用时,线程1将恢复运行。我已经测试了代码,它的效果正如我所希望的。
但是,正如你所看到的,当代码运行时:
步骤1,线程1调用:(Apple文档说:尝试获取锁定,阻止线程的执行直到可以获得锁定)
步骤2,线程1调用: 步骤3,线程2调用:(根据苹果的文档,线程2应该被阻塞) 步骤4,线程2调用:(因此,线程2应该被阻塞,直到调用为止)
我认为我的代码出现了死锁,但为什么不是呢? 所以我猜测当线程1在步骤2上调用时,cocoaCondition被解锁了,是吗?
- (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运行方法2。我希望当调用时,线程1会被阻塞。然后当线程2调用时,线程1将恢复运行。我已经测试了代码,它的效果正如我所希望的。
但是,正如你所看到的,当代码运行时:
步骤1,线程1调用:(Apple文档说:尝试获取锁定,阻止线程的执行直到可以获得锁定)
步骤2,线程1调用: 步骤3,线程2调用:(根据苹果的文档,线程2应该被阻塞) 步骤4,线程2调用:(因此,线程2应该被阻塞,直到调用为止)
我认为我的代码出现了死锁,但为什么不是呢? 所以我猜测当线程1在步骤2上调用时,cocoaCondition被解锁了,是吗?