zoukankan      html  css  js  c++  java
  • 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] 消费产品

     

     
  • 相关阅读:
    docker
    opencart
    Why is setTimeout(fn, 0) sometimes useful?
    linux下php环境配置
    xampp for linux
    Where to go from here
    freefcw/hustoj Install Guide
    khan academy js
    SDWebImage
    基于OpenCV 的iOS开发
  • 原文地址:https://www.cnblogs.com/liuting-1204/p/6022325.html
Copyright © 2011-2022 走看看