Fork me on GitHub

使用NSCondition实现生产者消费者问题

使用NSCondition,类似Java中的wait,notify机制

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

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

  • 消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品;
  • 生产者制造产品,首先也是要取得锁,然后生产,再发signal,语义等同Java的notify,这样可唤醒wait的消费者。

示例代码如下:

 

 

@interface ViewController() 
-(void)createProducer;
-(void)createConsumer;
@end

@implementation ViewController{
    NSMutableArray *products;
    NSCondition *condition;
}

-(void)createProducer{
    [condition lock];
    [products addObject:[[NSObject alloc] init]];
    NSLog(@”produce a product”);
    [condition signal];
    [condition unlock];
}

-(void)createConsumer{
    [condition lock];
    while ([products count]==0) {
        NSLog(@”wait for product”);
        [condition wait];
    }

    [products removeObjectAtIndex:0];
    NSLog(@”consume a product”);
    [condition unlock];
}

….

- (void)viewDidLoad
{
    [super viewDidLoad];

    products=[NSMutableArray array];
    condition=[[NSCondition alloc] init];    

    [NSThread detachNewThreadSelector:@selector(createConsumer) toTarget:self withObject:nil];
    [NSThread detachNewThreadSelector:@selector(createProducer) toTarget:self withObject:nil];

 

posted on 2012-02-09 15:03  pengyingh  阅读(1373)  评论(0编辑  收藏  举报

导航