我有一个发布者线程和一个消费者线程。他们通过std::stack<Data *>
. 发布者只需 push() 指针,消费者只需 pop() 指针,使用它并在其上调用 delete。既然只有一个线程一次发布一个指针,一个线程消费指针,那还需要同步栈吗?请记住,堆栈仅存储指针。Publisher 仅在 Data() 完全构造时推送指针。
问问题
69 次
3 回答
3
未能const
在命名空间中的容器的非方法上同步std
是未定义的行为。
也不在push
a的底层容器上。所以两个线程都在写入.pop
const
stack
stack
一种思考方式是,至少两者都将不得不争夺 中元素的数量stack
:一个试图增加它,另一个试图减少它。(还有其他问题,但应该让你相信两者都在写入 的状态stack
)
于 2013-01-31T15:32:31.477 回答
1
该std::stack<Data*>
实例需要同步访问,因为多个线程可以修改它(通过pop()
和push()
),但其中包含的元素不会,因为任何时候只有一个线程可以对元素进行操作。
于 2013-01-31T15:26:38.290 回答
1
是的,需要同步对堆栈的访问,因为std::stack
类不保证任何操作都是原子的,并且可能push()
会top()
交错pop()
。
于 2013-01-31T15:26:43.377 回答