About NSCondition

介绍一下 NSCondition

  • NSCondition类是互斥锁和条件锁的结合体。需要注意的是,由于操作系统实现的差异,即使在代码中没有发送signal消息,线程也有可能被唤醒,所以需要增加谓词变量来保证程序的正确性。
  • 代码介绍
NSConditon *condition =[[NSCondition alloc] init];
//一般用于多线程同时访问、修改同一个数据源,保证在同一时间内数据源只被访问、修改一次,其他线程的命令需要在lock 外等待,只到unlock ,才可访问
[condition lock];
//与lock 同时使用
[condition unlock];
//让当前线程处于等待状态
[condition wait];
//CPU发信号告诉线程不用在等待,可以继续执行
[condition signal];

有一点要说明的是,[condition lock]虽然可以对当前代码段的数据源上锁,但是如果同时使用了[condition wait]阻塞线程,其他的线程是可以通过[condition signal]恢复线程来继续访问这段数据源。这也就是定义中提到的

一个线程在等待信号而阻塞时,可以被另外一个线程唤醒。这一点和线程上锁后数据不能被其他数据访问,并不冲突

应用示例

  • 创建线程锁并开启线程等待
NSCondition *cocoaCondition = [[NSCondition alloc] init];
[cocoaCondition lock];
while (timeToDoWork <= 0)
    [cocoaCondition wait];
timeToDoWork--;
// Do real work here.
//
[cocoaCondition unlock];
  • 在其他线程中唤醒:
[cocoaCondition lock];
timeToDoWork++;
[cocoaCondition signal];// 通知线程恢复
[cocoaCondition unlock];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容