首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步生产者、消费者和生产者队列

同步生产者、消费者和生产者队列
EN

Stack Overflow用户
提问于 2010-10-09 16:40:26
回答 2查看 884关注 0票数 0

我有一个生产者和一个消费者。生产者用对象填充其内部队列,消费者一个接一个地获取这些对象。我想让消费者与生产者同步,这样消费者就会在没有准备好的对象时阻塞,我想让生产者与自己同步,这样当队列满了时它就会停止生产(当有空间时,它会重新开始)。我该怎么做?我可以使用NSConditionalLock在没有队列的情况下解决更简单的情况,但是有了队列问题看起来更复杂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-10 00:32:55

我最终使用了两个信号量:objectsReadybufferFreeSlots

代码语言:javascript
复制
@implementation Producer

- (id) getNextObject {
    [objectsReady wait];
    id anObject = [[buffer objectAtIndex:0] retain];
    [buffer removeObjectAtIndex:0];
    [bufferFreeSlots signal];
    return [anObject autorelease];
}

- (void) decodeLoop {
    while (1) {
        [bufferFreeSlots wait];
        [buffer push:[self produceAnObject]];
        [objectsReady signal];
    }
}

@end

bufferFreeSlots被初始化为最大队列大小。到目前为止,它似乎是有效的,但上帝知道这是一种信念的行为,而不是坚实的信心。

票数 0
EN

Stack Overflow用户

发布于 2010-10-10 00:48:34

您可以考虑使用一对NSOperationQueues或分派队列。如果需要,让您的生产操作(在生产者队列中)在主线程上发送消息到一个对象,该对象将消费操作添加到消费者队列中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3896617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档