问题标签 [producer-consumer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
889 浏览

multithreading - 同步生产者、消费者和生产者队列

我有一个生产者和一个消费者。生产者用对象填充其内部队列,消费者一一获取这些对象。我想将消费者与生产者同步,以便消费者在没有准备好对象时阻塞,并且我想将生产者与自身同步,以便在队列已满时停止生产(并在有空间时重新开始) . 我怎么做?我能够在没有使用队列的情况下解决一个更简单的情况NSConditionalLock,但是使用队列问题看起来更复杂。

0 投票
2 回答
2766 浏览

c++ - 在生产者-消费者代码中使用 wait() 提升条件死锁

我已经使用 Boost 线程和条件实现了一个基本的线程生产者-消费者(线程 1 = 生产者,线程 2 = 消费者)。我经常无限期地陷入等待() 。我真的看不出这里有什么问题。下面是一些伪代码:

一些附加信息:

  • 使用 Boost v1.44
  • Linux 和 Android 中出现问题;我还不确定它是否发生在 Windows 中

有任何想法吗?

更新:我相信我已经隔离了这个问题。一旦确认,我会进一步更新,希望是明天。

更新 2:事实证明上述代码没有问题。我依赖于 AddToQueue() 的底层 API - 在工作线程中处理数据并将其返回给 API 时,它有一个循环错误,它会再次调用 AddToQueue() ......现在已修复;-)

0 投票
1 回答
1517 浏览

c# - .net 4.0 上 BlockingCollection 的非常独特的例外

我正在使用BlockingCollection生产者消费者模式,我得到了一个例外,我想在上面写一个专利——谷歌只有两个结果!期望是“CompleteAdding 不能与添加到集合中同时使用”,它发生在 iTryAdd在 BlockingCollection 上,如下所示:

CompleteAddingConsumer-Producer 包装类的处置中调用:

微软的人有想法吗?我应该在取消之后和调用 CompleteAdding 之前睡觉吗?

0 投票
1 回答
3339 浏览

concurrency - 生产者-消费者模型 - 二进制信号量或互斥量?

这主要是关于概念的理解,这让我感到困惑。

互斥是指一个线程控制共享资源的访问,执行操作并解锁它,然后只有其他线程可以访问锁

二进制信号量就像一个线程可以访问共享资源但可以访问锁,而另一个线程可以解锁它

在我在这里看到的最后一个问题中,提到了"semaphores are more suitable for some synchronization problems like producer-consumer".

我的问题是,例如,如果生产者线程已获得锁定并用数据填充了一些队列,而消费者同时解锁它,是否存在任何并发问题?

0 投票
1 回答
779 浏览

c# - 多线程中的变量范围,为什么我的对象引用丢失了?

简单来说,在单生产者-单消费者场景下,我使用了一个可变对象来实现生产者和消费者之间的同步和传递数据和消息。共享缓冲区是一个ConcurrentQueue字节数组。为了实现循环缓冲区并防止堆碎片和频繁的对象交换,GC我使用了一个ConcurrentBag字节数组作为已用字节数组的回收站。ManualResetEventSlim用于线程同步。有时我在代码中丢失了对字节数组的引用。下面是我的代码的简化版本,以防您需要更多详细信息,但我想这是使用线程时的常规错误。

实际上GetEmptyBuffer()方法经常创建新的缓冲区,虽然使用的缓冲区存储在回收站中,但回收站计数有时不会增加!

0 投票
1 回答
776 浏览

c# - 需要具有 .NET 4.0 新功能的单生产者/单消费者模式示例

.NET 在 System.Collection.Concurrent 和一些同步类下添加了新的并发功能。使用这些功能的单一生产者 - 单一消费者模式是否有任何好的样本?(实际上,如果它还没有将其实现为共享缓冲区,我将为其添加一个循环缓冲区模式)

0 投票
4 回答
2376 浏览

multithreading - 多线程:经典的生产者消费者算法

关于生产者-消费者问题的经典算法我不明白的东西(来自维基百科:)

我注意到生产者和消费者都在弄乱缓冲区之前锁定“互斥锁”,然后再解锁它。如果是这种情况,即在任何给定时刻只有一个线程正在访问缓冲区,我真的看不出上述算法与只需要在缓冲区上放置一个保护互斥锁的简单解决方案有何不同:

我能想到的唯一需要使用“fillCount”和“emptyCount”信号量的就是调度

也许第一个算法是为了确保在 5 个消费者正在等待一个空缓冲区(零'fillCount')的状态下,可以确保当一个新的生产者出现时,它将超过它的“down(emptyCount)”快速声明并快速获取“互斥锁”。

(而在另一种解决方案中,消费者将不必要地获得“互斥体”,只是为了放弃它,直到新的生产者获得它并插入一个项目)。

我对吗?我错过了什么吗?

0 投票
1 回答
1169 浏览

c - pthreads生产者-消费者死锁

我写了以下代码:

所有变量都已正确初始化。任务是生成 JOB_SIZE 元素并使用它们。它有时会陷入死锁。我对 posix 线程很陌生,所以我可能遗漏了一些非常明显的东西(生产者/消费者在 java/C#/python 中多次使用,但现在我真的被卡住了)。我知道用信号量来做这件事要容易得多,但我需要用这种方式来做。

有什么建议么?

0 投票
4 回答
2080 浏览

c - C - 生产者/消费者死锁问题

我正在尝试在有界缓冲区中使用生产者/消费者线程。缓冲区长度为 5。我有 1 个互斥体和 2 个信号量,从缓冲区大小开始是空的,从 0 开始是满的。

当我在最后没有 sleep() 的情况下运行我的代码时,它会不断产生直到缓冲区完全填满,消耗直到它为空,所以输出如下所示:

但是,当我最后使用 sleep() 运行时,它会打印出:

然后它似乎被锁定了,但我不确定为什么不管是否有睡眠,它的行为方式都是如此。有什么建议么?我的主要方法基本上只是做了一些声明,然后创建 1 个线程来生产和 1 个线程来消费,这些方法如下。

0 投票
2 回答
1931 浏览

java - Thinking In Java 4 中的单一生产者和消费者示例

在 TIJ4 P1208 中,有一个消费者(WaitPerson)和一个生产者(Chef)。在检查是否有饭菜时,每个人都会自行同步。我认为他们应该在用餐时同步。否则,当服务员检查是否有饭菜时,厨师很可能正在制作餐点,这导致服务员检查时饭菜处于不一致的状态。

你们怎么看?谢谢

这是代码:

code>