gpt4 book ai didi

c++ - 信号量、互斥量和条件变量的选择

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:14 24 4
gpt4 key购买 nike

我有一个生产者线程和一个消费者线程,生产者是实时的并且对确定性敏感。

因此,我决定使用无锁 fifo 队列将处理从生产者线程提升到消费者线程。目标是让消费者既响应又避免忙等待,同时永远不会延迟生产者不确定的时间;因此任何分配/锁定(和内核条目,我想?)等都是完全不可能的。

我已经实现了这个模式,它似乎运行良好,但是我不确定为什么需要互斥体:

std::mutex m;
std::condition_variable cv;

void consumer()
{
std::unique_lock<std::mutex> lock(m);
while (1)
{
cv.wait(lock);
// process consumation...
}
}

void producer()
{
while (1)
{
// produce and post..
cv.notify_one();
}
}

其他典型示例似乎也锁定了生产者中的互斥锁,为什么?我的数据通信已经是线程安全的,所以不需要这个。另外,这是否容易丢失信号?

在研究这个问题时,我偶然发现了似乎明确用于这种情况的信号量。与这个系统相比有什么好处?目前我更喜欢我的解决方案,因为它是标准库的一部分。

最佳答案

信号量条件变量 在某种程度上是相似的概念。至少经典的 Counting Semaphores 不能从当前的 c++ 标准库中原生获得。但是这些可以很容易地替换为 std::condition_variable控制递增/递减的整数值。

条件变量的 std::mutex 是必需的,以防止在更改基础值时出现竞争条件。

关于c++ - 信号量、互斥量和条件变量的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com