我有单一生产者和单一消费者的生产者/消费者情况,共享一个共同的std :: deque。
让我写一些代码:
deque<int> dq;
void producer()
{
for (int i = 0; i < N; i++)
dq.push_back(i);
// signal data
}
void consumer()
{
// get signal
int n = dq.front();
dq.pop_front();
}
考虑在独立线程上执行的consumer()和producer()。这段代码需要同步吗?
答案 0 :(得分:2)
如果您没有在读者和作者之间进行同步,则可能会出现数据损坏。
所以答案一般是否定的。
多个读者是安全的。多个线程可以同时读取 单个容器的内容,这将正常工作。 当然,不得有任何作家在集装箱上行事 在阅读期间。
根据环境的不同,您可以使用不同的并发容器。例如,MSDN支持concurrent queue并且有boost个库也提供lock free containers。
答案 1 :(得分:0)