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用法的更多相关文章

  1. NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)

    NSCondition的用法 使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题. 基本思路是,首先要创建公用的NSCondition实例.然后: 消费者取得锁,取产品,如果没有 ...

  2. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  3. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  4. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  5. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  6. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  7. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  8. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  9. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

随机推荐

  1. [置顶] 和孩子们一起学Python编程

    1. 推荐书名 Computer Programming for Kids and Other Beginners in Python, 4Ed.pdf     中文译名:<和孩子们一起学Pyt ...

  2. 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)

    今天一直在查找语音频谱之类的问题,今天正好有机会和大家共享一下. 语音信号处置之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy0 ...

  3. ASP.NET Zero--8.一个例子(1)菜单添加

    以一个商品分类管理功能来编写,代码尽量简单易懂.从一个实体开始,一直到权限控制,由浅到深一步步对功能进行完善. 1.打开语言文件 [..\MyCompanyName.AbpZeroTemplate.C ...

  4. Node.js中读取文件后用Json.parse方法报错

    今天,在调试一个node项目时,发现了一个很大的坑,在此分享给大家! 大家都知道,Json.parse()方法对格式要求是很严格的,格式不对极其容易报错,但是有时候格式看似是正确的也会报错. 比如这一 ...

  5. Unity Get Thread Content Failed

    最近在使用Unity做项目时,发现总是莫名的出现“Get Thread Content Failed”的消息弹出,然后Unity就卡死了,这样反反复复,后来查到是因为一些杀毒软件在阻止Unity,尝试 ...

  6. Jdon框架开发指南

    Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step ...

  7. The Linux Mint 17.1:Eclipse Run The C++ And Python Configoration

    p { margin-bottom: 0.1in; line-height: 120% } # Copyright (c) 2016, 付刘伟 (Liuwei Fu)# All rights rese ...

  8. js Checkbox 传递多个值给后台

    ------前台JS "<input class=\'jTabCheck2\' type=\'checkbox\' partvguid=" + obj + " pr ...

  9. 网页视频下载牛逼工具,支持各种格式转换,比如腾讯视频格式qlv转mp4

    这种思路真是创新,原文地址:http://jingyan.baidu.com/article/5225f26b03f047e6fb090860.html 软件工具名字:维棠下载. 上图: 1:搜索视频 ...

  10. Android Tips

    (1).设置图片缓存大小,一般可以设置为内存的1/8 int memoryCache = (int) (Runtime.getRuntime().maxMemory() / 8); (2). (3). ...