文章概要
生产者,消费者
如何使用信号量加锁
生产者,消费者
我对于生产者和消费者的理解是:需要有一个缓存池,生产者和消费者需要在不同的线程中去分别操作缓存池,这时候就特别容易产生并发问题。
下面讲解如何去写一个消费者和生产者
缓存池:其实需要一个可变的容器,所有在oc里面可变数组即可
//生产者消费者
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
self.array = [[NSMutableArray alloc] init];
dispatch_queue_t queue = dispatch_queue_create("cn.chutong.www", DISPATCH_QUEUE_CONCURRENT);
//生产
dispatch_async(queue, ^{
while (YES) {
int count = random()%10;
sleep(1);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self.array addObject:[NSString stringWithFormat:@"%d",count]];
dispatch_semaphore_signal(semaphore);
NSLog(@"生产了%d",count);
}
});
//消费
dispatch_async(queue, ^{
while (YES) {
if (self.array.count>0) {
NSLog(@"消费了%@",self.array.lastObject);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self.array removeLastObject];
dispatch_semaphore_signal(semaphore);
}
}
});
生产与消费成对出现: