小编sch*_*yxp的帖子

NSCondition如何运作?

我在这里使用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];
}
Run Code Online (Sandbox Code Playgroud)

我有两个线程,thread1运行method1,thread2运行method2.我希望在[cocoaCondition wait]调用时,thread1将被阻止.然后当thread2调用时[cocoaCondition signal],thread1将恢复运行.我测试了代码,它正如我希望的那样工作.

但是,如您所见,当代码运行时:

第1步,thread1调用:( [cocoaCondition lock] Apple doc说:尝试获取锁,阻止线程的执行,直到获得锁定)

第2步,thread1调用:[cocoaCondition wait]
第3步,thread2调用:( [cocoaCondition lock]继苹果的doc之后,应该阻塞thread2)
第4步,thread2调用:( [cocoaCondition signal]因此,应该阻塞thread2,并且在调用之前不能调用此方法[cocoaConditon unlock])

我认为我的代码已陷入僵局,但为什么不呢?所以我猜想当thread1调用[cocoaCondition wait]第2步时,cocoaCondition被解锁了,是吗?

iphone multithreading locking unlock

3
推荐指数
1
解决办法
6273
查看次数

标签 统计

iphone ×1

locking ×1

multithreading ×1

unlock ×1