c++ - 生产者/消费者模式的 STL 容器线程安全

标签 c++ multithreading stl race-condition

我打算做以下事情:

存储要使用的预构建对象的双端队列。主线程可能会到处消耗这些对象。我有另一个用于日志记录和其他非时间关键但昂贵的东西的垃圾线程。当预建对象快要用完时,我会在垃圾线程中重新填充它们。

现在我的问题是,这里会出现竞争条件吗?从技术上讲,一个线程从前面消耗对象,另一个线程将对象推到后面。只要我不让大小减少到零,就应该没问题。唯一让我担心的是这个双端队列的“大小”。他们是否在 STL 容器中存储整数“大小”变量?修改那个大小变量应该引入竞争条件吗?

解决这个问题的最佳方法是什么?我真的不想使用锁,因为主线程对性能至关重要(我首先预先构建这些对象的原因!)

最佳答案

STL 容器不是线程安全的,期间,不要玩这个。具体来说,双端队列元素通常存储在短数组链中,并且在使用双端队列操作时会修改该链,因此存在很大的困惑空间。

关于c++ - 生产者/消费者模式的 STL 容器线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851263/

相关文章:

c++ - 从两个 vector 创建 map

c++ - 为什么 ostringstream 在多线程环境下不能正常工作

C++ - boost::any 序列化

java - 线程间共享数据

java - 在 Android 中异步执行方法的最佳方式(紧凑且正确)

c++ - 返回 std::vector - 正确的方法

c++ - 打印出指向 char 数组第一个索引的指针的值

c++ - 如何在编译时捕获 std::variant 持有错误的类型?

C++ OpenCV mat.at 在使用数据时出现访问冲突

c - Linux 内核 - kthread_stop 总是返回 -EINTR?