NSCondition用法
NSCondition用法
使用NSCondition,实现多线程同步。。。举个列子 消费者跟生产者。。。
现在传言6s要出了。。
- 消费者想买6s。现在还没有6s。消费者等待6s生产。
- 生产了一个产品,唤起消费者去买6s。解锁


1 @interface ViewController ()
2 /*
3 创建一个数组盛放生产的数据,创建一个线程锁
4 */
5 @property (nonatomic, strong) NSCondition *condition;
6 @property (nonatomic, strong) NSMutableArray *products;
7
8 @end
9
10 @implementation ViewController
11 #pragma mark - event reponse
12 /*
13 拖拽一个点击事件,创建两个线程
14 */
15 - (IBAction)coditionTest:(id)sender {
16 NSLog(@"condiction 开始");
17 [NSThread detachNewThreadSelector:@selector(createConsumenr) toTarget:self withObject:nil];
18 [NSThread detachNewThreadSelector:@selector(createProducter) toTarget:self withObject:nil];
19 }
20
21 #pragma mark - provate methods
22 - (void)createConsumenr
23 {
24 [self.condition lock];
25 while(self.products.count == 0){
26 NSLog(@"等待产品");
27 [_condition wait];
28 }
29 [self.products removeObject:0];
30 NSLog(@"消费产品");
31 [_condition unlock];
32 }
33
34 - (void)createProducter
35 {
36 [self.condition lock];
37 [self.products addObject:[[NSObject alloc] init]];
38 NSLog(@"生产了一个产品");
39 [_condition signal];
40 [_condition unlock];
41 }
42
43 #pragma mark - getters and setters
44 - (NSMutableArray *)products
45 {
46 if(_products == nil){
47 _products = [[NSMutableArray alloc] initWithCapacity:30];
48 }
49 return _products;
50 }
51
52 - (NSCondition *)condition
53 {
54 if(_condition == nil){
55 _condition = [[NSCondition alloc] init];
56 }
57 return _condition;
58 }
59
60 @end

最后附上运行结果
2015-05-27 10:14:32.283 Test-NSCondition[43215:1648129] condiction 开始
2015-05-27 10:14:37.051 Test-NSCondition[43215:1648533] 等待产品
2015-05-27 10:14:37.056 Test-NSCondition[43215:1648534] 生产了一个产品
2015-05-27 10:14:37.056 Test-NSCondition[43215:1648533] 消费产品
NSCondition用法的更多相关文章
- NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)
NSCondition的用法 使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题. 基本思路是,首先要创建公用的NSCondition实例.然后: 消费者取得锁,取产品,如果没有 ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
随机推荐
- 精通CSS+DIV基础总结(三)
Div+CSS可是实现简单的网页设计,对于需要添加动作,更方便的交互,Javascript给我们提供了方便:数据的存储可以利用XML使其更加方便:而对于减少页面与服务器的交互,可以利用Ajax技术,与 ...
- continue与break
1.continue语句,1至20内奇数累加和 #include<iostream> using namespace std; void main(){ int i=0; int sum= ...
- 横瓜执导众程序员开展大讨论关于C、JAVA及其它主流IT技术使用情况和优点缺点。
横瓜执导众程序员开展大讨论关于C.JAVA及其它主流IT技术使用情况和优点缺点. 遥执乾坤(44758121) 18:21:23 mysql据说只能使用一个索引,我这里几乎所有字段都有索引. 但每个 ...
- iOS 指南针的制作 附带源码
iOS 指南针的制作 附带源码 代码下载地址: http://vdisk.weibo.com/s/HK4yE http://pan.baidu.com/share/link?shareid=7 ...
- Oracle基础学习(一)常用函数
1.绝对值:abs() select abs(-2) value from dual; 2.取整函数(大):ceil() select ceil(-2.001) value from dual;(-2 ...
- ASP.NET上传大文件出现网页无法显示的问题
使用FileUpload上传的时候,默认允许大小是4M,而当小于4M的时候正常运行:当超过4M将显示网页无法显示.解决方法如下: 在web.config中的<system.web>< ...
- 【CSS学习笔记】整齐的表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 【Linux学习三】Linux系统目录架构
主要包括: ●bin:保存的是可执行文件,二进制,就是命令 ●boot:引导目录,操作系统的启动加载,包含版本内核文件.greb引导程序- ●dev:硬件设备文件,如硬盘.网卡.声卡.终端.显卡,每一 ...
- linux面试题集锦4《转》
四.编程与应用题: 1.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下. 参考程序: #!/bin/sh FILENAME= echo “Input file na ...
- [HMLY]8.Cocoa
cocoa是苹果公司为mac os x所创建的原声面向对象API,是mac os x上五大API之一,其他四个是carbon,posiX,x11,java. 苹果的面向对象开发框架,用来生成 Mac ...