我在 C++ 应用程序中有一个带有指针的 deque
。我知道有两个线程 可以访问它。
Thread1 将从后面添加指针,Thread2 将从前面处理和删除指针。
Thread2 会等到deque
达到一定数量,比如10 条,然后开始处理它。它一次只会循环处理 10 个项目。与此同时,Thread1 可能仍会继续向双端队列中添加新项目。
我认为不同步 deque
会很好,因为Thread1 和Thread2 正在访问不同的部分双端队列
。它是 deque
而不是 vector
。因此,container
的现有内存不会被重新分配。
我说的对吗?如果没有,为什么(我想知道我错过了什么)?
编辑:
我知道始终同步它不会有什么坏处。但这可能会损害性能或没有必要。如果可能的话,我只是希望它运行得更快、更正确。
最佳答案
双端队列必须跟踪它有多少元素以及这些元素的位置。添加元素会更改存储的数据,删除元素也是如此。在没有同步的情况下从两个线程更改数据是一场数据竞争,并会产生未定义的行为。
简而言之,您必须同步这些操作。
关于c++ - 我是否应该同步双端队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252467/