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. IOS开发小记-内存管理

    关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...

  2. android 视图设置多个setTag数据

    1)在string.xml 文件中添加 <item tyoe="id" name = "tag_first" /> <item tyoe=&q ...

  3. android自定义View---生成虚线的View

    1.在res/values/目录下 新建文件 attrs.xml <?  xml   version =  "1.0"   encoding =  "utf-8&q ...

  4. ADS的go to命令

    我们有时候在一个函数右键没有看到“go to”选项,这是因为没有Make,要先Make之后才能使用go to 命令

  5. Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性!

    Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性! <div style="cursor:pointer;" onclick="sele ...

  6. 死锁线程探讨Java中的死锁现象

    题记:写这篇博客要主是加深自己对死锁线程的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 今天搞了一下Java的死锁机制,感到自己还是不怎么懂,所以就从一些简略的源代码中琢磨:我先 ...

  7. 使用pentaho工具将数据库数据导入导出为Excel

    写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...

  8. Mac下Android studio搭建Android开发环境【新手】

    上学期用的还是windows,这学期新入手了mac,突然也想装个Android studio来玩玩.安装过程中出现了问题,记录如下. 先是装安卓studio的下载链接,不推荐去官网装,这里提供一个挺好 ...

  9. LaTeX入门教程

    LaTeX(LATEX,音译"拉泰赫")是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用 ...

  10. ionic2环境搭建与hello word

    一.环境搭建 需要安装配置以下组件,具体参考:Cordova环境搭建, 我的版本信息如下: 这里要特别注意,node版本,ionic2需要 大于v6 ,而不是0.xx版本,否则会不支持报错. 二.设置 ...