美文网首页
Objective-C生产者消费者之NSCondition实现

Objective-C生产者消费者之NSCondition实现

作者: 杭州凤梨 | 来源:发表于2017-01-12 19:20 被阅读0次
    生产者队列
    - (void)scheduleProducerQueue {  
        NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
            UIImage *image = ;//produce an image;
            if (image) {
                [self.condition lock];//请求加锁,成功后开始操作products
                [self.products addObject:image];
                [self.condition signal];
                [self.condition unlock];
            }
        }];
        [self.producerQueue addOperation:operation];
    }
    
    
    消费者队列
    - (void)scheduleConsumerQueue {
        NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
            [self.condition lock];
            while (self.products.count == 0) {
                [self.condition wait];
            }
            UIImage *image = self.products.firstObject;
            [self.products removeObjectAtIndex:0];
            //do something with image
            [self.condition unlock];
        }];
        [self.consumerQueue addOperation:operation];
    }
    
    

    变量

    - (NSCondition *)condition {
        if (!_condition) {
            _condition = [[NSCondition alloc] init];
        }
        return _condition;
    }
    
    //使用NSOperationQueue是为了方便cancel
    - (NSOperationQueue *)producerQueue {
        if (!_producerQueue) {
            _producerQueue = [[NSOperationQueue alloc] init];
            [_producerQueue setMaxConcurrentOperationCount:2];
        }
        return _producerQueue;
    }
    
    - (NSOperationQueue *)consumerQueue {
        if (!_consumerQueue) {
            _consumerQueue = [[NSOperationQueue alloc] init];
            [_consumerQueue setMaxConcurrentOperationCount:2];
        }
        return _consumerQueue;
    }
    
    - (NSMutableArray *)products {
        if (!_products) {
            _products = [[NSMutableArray alloc] initWithCapacity:3];
        }
        return _products;
    }
    
    

    相关文章

      网友评论

          本文标题:Objective-C生产者消费者之NSCondition实现

          本文链接:https://www.haomeiwen.com/subject/tahjbttx.html