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] 消费产品

转载于:https://www.cnblogs.com/IT-xiao-jian/p/4532768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值