zoukankan      html  css  js  c++  java
  • NSCondition的用法

    使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题。

    基本思路是,首先要创建公用的NSCondition实例。然后:

    • 消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品;
    • 生产者制造产品,首先也是要取得锁,然后生产,再发signal,这样可唤醒wait的消费者。
    - (IBAction)conditionTest:(id)sender
    {
        NSLog(@"begin condition works!");
        products = [[NSMutableArray alloc] init];
        condition = [[NSCondition alloc] init];
        
        [NSThread detachNewThreadSelector:@selector(createProducter) toTarget:self withObject:nil];
        [NSThread detachNewThreadSelector:@selector(createConsumenr) toTarget:self withObject:nil];
    }
    
    - (void)createConsumenr
    {
        [condition lock];
        while ([products count] == 0) {
            NSLog(@"wait for products");
            [condition wait];
        }
        [products removeObjectAtIndex:0];
        NSLog(@"comsume a product");
        [condition unlock];
    }
    
    - (void)createProducter
    {
        [condition lock];
        [products addObject:[[NSObject alloc] init]];
        NSLog(@"produce a product");
        [condition signal];
        [condition unlock];
    }
    

      代码如上所示!

  • 相关阅读:
    从Pycharm说起
    前端工程师小A学习JS的旅程
    模板引擎开发(一)
    Bootstrap01
    Passbook详解与开发案例
    DLL文件知多少?
    C#中的索引器的简单理解和用法
    python 的列表遍历删除
    Node.js与Golang使用感受与小结1
    解决设计中的两难问题
  • 原文地址:https://www.cnblogs.com/easonoutlook/p/2649141.html
Copyright © 2011-2022 走看看