zoukankan      html  css  js  c++  java
  • NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)

    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];
    }

     这样就可以通过创建两个子线程,使用操作系统的信号变量 实现线程同步, 代码如上所示!

  • 相关阅读:
    MEP工作流程
    一盘很大的棋
    老人棒子鸡
    REVIT多专业协同设计
    不做没有理想的咸鱼
    卫生间排风设计规范
    如何时刻保持在目标的正确轨道上
    OGame殖民
    OGame舰队保护(FleetSave, FS)
    在局域网内架ESS3.0升级服务器
  • 原文地址:https://www.cnblogs.com/ccguo/p/3369784.html
Copyright © 2011-2022 走看看