我打算做以下事情:
存储要使用的预构建对象的双端队列。主线程可能会到处消耗这些对象。我有另一个用于日志记录和其他非时间关键但昂贵的东西的垃圾线程。当预建对象快要用完时,我会在垃圾线程中重新填充它们。
现在我的问题是,这里会出现竞争条件吗?从技术上讲,一个线程从前面消耗对象,另一个线程将对象推到后面。只要我不让大小减少到零,就应该没问题。唯一让我担心的是这个双端队列的“大小”。他们是否在 STL 容器中存储整数“大小”变量?修改那个大小变量应该引入竞争条件吗?
解决这个问题的最佳方法是什么?我真的不想使用锁,因为主线程对性能至关重要(我首先预先构建这些对象的原因!)
最佳答案
STL 容器不是线程安全的,期间,不要玩这个。具体来说,双端队列元素通常存储在短数组链中,并且在使用双端队列操作时会修改该链,因此存在很大的困惑空间。
关于c++ - 生产者/消费者模式的 STL 容器线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851263/