NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)
2024-09-25 21:37:26
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]; } |
这样就可以通过创建两个子线程,使用操作系统的信号变量 实现线程同步, 代码如上所示!
最新文章
- ASP.NET 控件前缀命名规范
- 提高D3js力导向图加载速度(转)
- jQuery 重新温习 遗忘知识点
- UVa120 - Stacks of Flapjacks
- Java中的多线程操作初探
- SQL VS NoSQL 如何选择数据库
- 利用MiddleGen-hibernate-r5生成hbm文件及POJO文件
- thinkphp3.2-更改控制器名后找不到相应的表?报1146的错
- HTML5 CSS3 诱人的实例: 3D立方体旋转动画
- VS.NET C# 开发ArcGis插件无法进入断点调试的解决方法
- tyvj/joyoi 2018 小猫爬山
- C# Winform同时启动多个窗体类
- ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题
- Java并发编程(十一)线程池的使用
- go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE
- nginx关闭全局access.log,error.log
- 解题:NOI 2010 航空管制
- String类的深入理解
- vue框架(二)_vue环境搭建及创建项目
- 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)
热门文章
- Learning WCF Chapter 3 Bindings One-Way and Duplex Communication
- Node.js权威指南 (7) - 实现基于TCP与UDP的数据通信
- (转载)shell中用date命令获取昨天、明天或者多天前的日期
- MVC5 学习整理
- UVa 10294 Arif in Dhaka (First Love Part 2)(置换)
- 用GPUImage开启相机并且开启滤镜效果
- RAM和DDR
- 阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房) - agapple - ITeye技术网站
- JVM中锁优化简介
- Google图片搜索