c++ - 我是否应该同步双端队列

标签 c++ c multithreading deque

我在 C++ 应用程序中有一个带有指针的 deque。我知道有两个线程 可以访问它。

Thread1 将从后面添加指针,Thread2 将从前面处理和删除指针。

Thread2 会等到deque 达到一定数量,比如10 条,然后开始处理它。它一次只会循环处理 10 个项目。与此同时,Thread1 可能仍会继续向双端队列中添加新项目。

我认为不同步 deque 会很好,因为Thread1Thread2 正在访问不同的部分双端队列。它是 deque 而不是 vector。因此,container 的现有内存不会被重新分配。

我说的对吗?如果没有,为什么(我想知道我错过了什么)?

编辑:

我知道始终同步它不会有什么坏处。但这可能会损害性能或没有必要。如果可能的话,我只是希望它运行得更快、更正确。

最佳答案

双端队列必须跟踪它有多少元素以及这些元素的位置。添加元素会更改存储的数据,删除元素也是如此。在没有同步的情况下从两个线程更改数据是一场数据竞争,并会产生未定义的行为。

简而言之,您必须同步这些操作。

关于c++ - 我是否应该同步双端队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252467/

相关文章:

c++ - typedef 函数不是类型名?

C、为什么printf在个位数长后添加 "D"?

javascript - 在 Android 上从 JavaScript 访问 UI

multithreading - 线程正在桌面上书写

c++ - std::chrono::duration 对象的绝对值

C++:Windows 10 x64 和 Windows 7 x64 上的 MFC 应用程序

c++ - 错误 C2664 : 'errno_t strcpy_s(char *,rsize_t,const char *)' : cannot convert parameter 2 from 'char [512]' to 'rsize_t'

c++ - OpenCV - 关闭图像显示窗口

c - 赋值从指针生成整数,无需强制转换

java - 在线程中获得特定输入后,如何退出线程中运行的循环?在java中