是否可以在不同线程上使用 std::deque::push_back() 和 std::deque::front()/std::deque::pop_front() 而不同步? [复制]

2023-12-02

我有一个生产者/消费者的情况,只有一个生产者和一个消费者,共享一个公共的 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()。这段代码需要同步吗?


如果读取器和写入器之间不同步,则可能会出现数据损坏。

所以一般来说答案是否定的。

To requote

多个读者是安全的。多个线程可以同时读取 单个容器的内容,并且这将正常工作。 当然,不能有任何作家作用于容器 在阅读期间。

根据环境的不同,可以使用不同的并发容器。例如,MSDN 支持并发队列还有boost提供的库无锁容器以及。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在不同线程上使用 std::deque::push_back() 和 std::deque::front()/std::deque::pop_front() 而不同步? [复制] 的相关文章

随机推荐