生产者消费者

2018-06-25  本文已影响0人  xukunluren

文章概要
生产者,消费者
如何使用信号量加锁
生产者,消费者
我对于生产者和消费者的理解是:需要有一个缓存池,生产者和消费者需要在不同的线程中去分别操作缓存池,这时候就特别容易产生并发问题。

下面讲解如何去写一个消费者和生产者

缓存池:其实需要一个可变的容器,所有在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);
       }
           
       }
   });

生产与消费成对出现:

image.png
上一篇 下一篇

猜你喜欢

热点阅读