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

Ven*_*tta 1 c++ multithreading stl race-condition

我打算做以下事情:

存储要消耗的预构建对象的双端队列.主线程可能会在这里和那里使用这些对象.我有另一个用于日志记录的垃圾线程和其他不是时间关键但昂贵的东西.当预构建的对象运行不足时,我会在junky线程中重新填充它们.

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

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

sha*_*oth 8

STL容器不是线程安全的,期间,不要玩这个.具体来说,deque元素通常存储在一个短数组链中,并且当使用deque操作时该链将被修改,因此存在很多搞乱的空间.