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] ...
随机推荐
- squid和varnish的小结
squid和varnish的小结 http://blog.haohtml.com/ 上周初步接触linux下的这2个反向缓存软件,都实验了一下,貌似squid还是比较顺利的,varnish则碰 ...
- 使用HttpURLConnection实现多线程下载
HttpURLConnection继承了URLConnection,因此也可用于向指定网站发送GET请求.POST请求,而且它在URLConnection基础上提供了如下便捷方法: 实现多线程下载的步 ...
- Quagga添加自己的命令
参考了王斌的文档:http://down.51cto.com/data/621454 TIP:笔者使用的版本是0.99.20 需求:在接口模式下添加一条"ip ospf enable&quo ...
- 火狐浏览器下使用jquery修改img的src
onUploadComplete': function (file, data) { //$("#submit").removeAttr("disabled") ...
- 创建基本的2D场景(part2)
让我们继续来学习Unity2D游戏场景的制作,本文分为以下3个部分: · 添加角色和控制 . 添加2D物理阻挡 · 添加2D效果 通过制作一个移动帽子接保龄球的小游戏,我们可以学习到任何创建游戏对象, ...
- mongo数据库时间存储的问题
题记:项目中要加的内容,可以实现对设备的预定,被某个用户预定后的设备就不能再被其他用户所使用了,用户预定的时候就需要输入预定时间,web前端用到了boostrap的date的一个插件,非常好用,接下来 ...
- freemarker 遍历 hashmap 到select option
<select id="experience"> <option value ="">--请选择--</option> &l ...
- D3.js:力导向图
var nodes = [ { name: "桂林" }, { name: "广州" }, { name: "厦门" }, { name: ...
- trove manual installation 翻译
目标 此文件提供了一步一步的指导手动安装trove在一个现有OpenStack的环境为了开发. 该文件将不包括: OpenStack的设置 trove服务配置 要求 正在运行的OpenStack的环境 ...
- JS代码:设为首页 加入收藏
// JavaScript Document // 加入收藏 <a onclick="AddFavorite(window.location,document.title)" ...