NSCondition的用法

使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题。

基本思路是,首先要创建公用的NSCondition实例。然后:

  • 消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品;
  • 生产者制造产品,首先也是要取得锁,然后生产,再发signal,这样可唤醒wait的消费者。
- (IBAction)conditionTest:(id)sender
{
    NSLog(@"begin condition works!");
    products = [[NSMutableArray alloc] init];
    condition = [[NSCondition alloc] init];
     
    [NSThread detachNewThreadSelector:@selector(createProducter) toTarget:self withObject:nil];
    [NSThread detachNewThreadSelector:@selector(createConsumenr) toTarget:self withObject:nil];
}
 
- (void)createConsumenr
{
    [condition lock];
    while ([products count] == 0) {
        NSLog(@"wait for products");
        [condition wait];
    }
    [products removeObjectAtIndex:0];
    NSLog(@"comsume a product");
    [condition unlock];
}
 
- (void)createProducter
{
    [condition lock];
    [products addObject:[[NSObject alloc] init]];
    NSLog(@"produce a product");
    [condition signal];
    [condition unlock];
}

 这样就可以通过创建两个子线程,使用操作系统的信号变量 实现线程同步, 代码如上所示!

最新文章

  1. ASP.NET 控件前缀命名规范
  2. 提高D3js力导向图加载速度(转)
  3. jQuery 重新温习 遗忘知识点
  4. UVa120 - Stacks of Flapjacks
  5. Java中的多线程操作初探
  6. SQL VS NoSQL 如何选择数据库
  7. 利用MiddleGen-hibernate-r5生成hbm文件及POJO文件
  8. thinkphp3.2-更改控制器名后找不到相应的表?报1146的错
  9. HTML5 CSS3 诱人的实例: 3D立方体旋转动画
  10. VS.NET C# 开发ArcGis插件无法进入断点调试的解决方法
  11. tyvj/joyoi 2018 小猫爬山
  12. C# Winform同时启动多个窗体类
  13. ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题
  14. Java并发编程(十一)线程池的使用
  15. go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE
  16. nginx关闭全局access.log,error.log
  17. 解题:NOI 2010 航空管制
  18. String类的深入理解
  19. vue框架(二)_vue环境搭建及创建项目
  20. 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)

热门文章

  1. Learning WCF Chapter 3 Bindings One-Way and Duplex Communication
  2. Node.js权威指南 (7) - 实现基于TCP与UDP的数据通信
  3. (转载)shell中用date命令获取昨天、明天或者多天前的日期
  4. MVC5 学习整理
  5. UVa 10294 Arif in Dhaka (First Love Part 2)(置换)
  6. 用GPUImage开启相机并且开启滤镜效果
  7. RAM和DDR
  8. 阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房) - agapple - ITeye技术网站
  9. JVM中锁优化简介
  10. Google图片搜索