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

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

  • 相关阅读:
    Django ORM多表操作
    Django 单表查询作业-笔记
    python 2 编码问题
    HTML-Bootstrap下载和基本使用
    Django ORM单表操作之增删改查
    Django ORM简介和单表创建的设置和过程
    Django --总结 之URL路由控制 视图相应,视图请求,和模板语法
    Django URL控制器
    JAVA编程
    UMI 的原理分析带有 UMI 的数据
  • 原文地址:https://www.cnblogs.com/ccguo/p/3369784.html
Copyright © 2011-2022 走看看