首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCondition是如何工作的?

NSCondition是如何工作的?
EN

Stack Overflow用户
提问于 2011-12-23 11:31:07
回答 1查看 6.7K关注 0票数 3

在这个意义上,我使用了NSCondition类:

代码语言:javascript
复制
- (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] (苹果文档说:尝试获取锁,阻止线程执行,直到获得锁为止)

步骤2,thread1调用:[cocoaCondition wait]

步骤3,thread2调用:[cocoaCondition lock] (按照苹果的文档,thread2应该被屏蔽)

步骤4,thread2调用:[cocoaCondition signal](因此,thread2应该被阻塞,并且在调用[cocoaConditon unlock]之前不能调用此方法)

我想我的代码是死锁的,但为什么不呢?因此,我猜测当thread1在步骤2上调用[cocoaCondition wait]时,cocoaCondition是解锁的,是吗?

EN

回答 1

Stack Overflow用户

发布于 2012-04-11 10:39:08

NSCondition Class Reference

文档说:“当线程等待一个条件时,条件对象解锁它的锁并阻塞线程。当条件被通知时,系统唤醒线程。然后条件对象在从wait或waitUntilDate:方法返回之前重新获得它的锁。因此,从线程的角度来看,它好像总是持有锁。”

你猜对了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8611994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档