使用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 阅读(1374) 评论(0) 编辑 收藏 举报