NSConditionLock

****NSConditionLock**** 对象所定义的互斥锁可以在使得在某个条件下进行锁定和解锁。它和 ****NSCondition**** 很像,但实现方式是不同的。
当两个线程需要特定顺序执行的时候,例如生产者消费者模型,则可以使用 ****NSConditionLock**** 。当生产者执行执行的时候,消费者可以通过特定的条件获得锁,当生产者完成执行的时候,它将解锁该锁,然后把锁的条件设置成唤醒消费者线程的条件。锁定和解锁的调用可以随意组合,****lock**** 和 ****unlockWithCondition****: 配合使用 ****lockWhenCondition:**** 和 ****unlock**** 配合使用。

- (void)producer {
  while (YES) {
       [self.conditionLock lock];
        NSLog(@"have something");         
        self.count++;         
        [self.conditionLock unlockWithCondition:1];     
  } 
} 

- (void)consumer {     
 while (YES) {         
  [self.conditionLock lockWhenCondition:1];         
  NSLog(@"use something");         
  self.count--;         
  [self.conditionLock unlockWithCondition:0];     
 } 
}

当生产者释放锁的时候,把条件设置成了1。这样消费者可以获得该锁,进而执行程序,如果消费者获得锁的条件和生产者释放锁时给定的条件不一致,则消费者永远无法获得锁,也不能执行程序。同样,如果消费者释放锁给定的条件和生产者获得锁给定的条件不一致的话,则生产者也无法获得锁,程序也不能执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引用自多线程编程指南应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有...
    Mitchell阅读 2,028评论 1 7
  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,693评论 2 17
  • 一、多线程 说明下线程的状态 java中的线程一共有 5 种状态。 NEW:这种情况指的是,通过 New 关键字创...
    Java旅行者阅读 4,761评论 0 44
  • 天气已经渐渐冷了下来,早上的时候已经可以清晰的看到自己呼吸之间的气息。这时节的天气像极了家里的深秋,满街或红或黄的...
    猫果树阅读 327评论 2 1
  • 今天谈到鬼故事的话题,想起许多年前在千岛湖的经历,当时非常可怕,现在回忆起来确实已体会到灵的世界。那是大约八年...
    宜然阅读 372评论 0 0