文章概要
生產(chǎn)者,消費(fèi)者
如何使用信號(hào)量加鎖
生產(chǎn)者,消費(fèi)者
我對(duì)于生產(chǎn)者和消費(fèi)者的理解是:需要有一個(gè)緩存池,生產(chǎn)者和消費(fèi)者需要在不同的線程中去分別操作緩存池,這時(shí)候就特別容易產(chǎn)生并發(fā)問(wèn)題峻堰。
下面講解如何去寫一個(gè)消費(fèi)者和生產(chǎn)者
緩存池:其實(shí)需要一個(gè)可變的容器,所有在oc里面可變數(shù)組即可
//生產(chǎn)者消費(fèi)者
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);
//生產(chǎn)
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(@"生產(chǎn)了%d",count);
}
});
//消費(fèi)
dispatch_async(queue, ^{
while (YES) {
if (self.array.count>0) {
NSLog(@"消費(fèi)了%@",self.array.lastObject);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self.array removeLastObject];
dispatch_semaphore_signal(semaphore);
}
}
});
生產(chǎn)與消費(fèi)成對(duì)出現(xiàn):