小编bod*_*unt的帖子

无锁实现中没有互斥锁的condition_variable

我使用std::atomics类似于 Herb Sutters CPPCon2014演讲的方式实现了一个无锁的单生产者多消费者队列。

有时,生产者太慢而无法满足所有消费者的需求,因此消费者可能会饿死。我想防止饥饿的消费者加入队列,因此我为10ms. 这个值是任意的,不是最优的。我想使用一个信号,一旦队列中再次有空闲插槽,消费者就可以将其发送给生产者。在基于锁的实现中,我自然会使用std::condition_variable此任务。但是现在在我的无锁实现中我不确定,如果引入 a 是正确的设计选择mutex,只是为了能够使用std::condition_variable

我只是想问你,如果 mutex在这种情况下是否是正确的方法?

编辑:我有一个从不睡觉的制作人。并且有多个消费者,如果他们饿了就去睡觉。因此整个系统一直在进步,因此我认为它是无锁的。我当前的解决方案是在消费者 GetData 函数中执行此操作:
std::unique_lock<std::mutex> lk(_idleMutex); _readSetAvailableCV.wait(lk);

一旦新数据准备好,这在生产者线程中:
_readSetAvailableCV.notify_all();

c++ multithreading c++11

5
推荐指数
1
解决办法
3641
查看次数

标签 统计

c++ ×1

c++11 ×1

multithreading ×1