【发布时间】:2014-05-02 16:20:51
【问题描述】:
我想知道什么是更好的选择:假设有一个可简单复制的对象,比方说一个队列数据结构,多个线程使用它来弹出/推送数据。该对象仅提供 put/push 方法,不能由多个线程同时访问。显然,如果调用了 put,则也不能调用 push。
您是否建议将模型包装成原子类型(如果可能),还是使用互斥锁?
问候!
【问题讨论】:
-
如果这不是作业问题,您可以使用其他人发明的轮子。比如Boost.Lockfree或者Intel的TBB的
concurrent_queue。 -
这取决于你的目标是什么。如果您希望最大限度地提高效率,无锁设计会更有效。如果您更关心健壮性和通用性,与互斥锁同步将不太容易受到细微错误的影响,并且将来更容易添加功能。不过,出于许多目的,这两种方法都可以正常工作。
-
不,这不是作业问题。我正在阅读 C++11 的文档,这是我脑海中出现的问题。我想听听做出这种决定的人的意见,并从实践中了解原子的局限性。感谢您的提振意见,但我认为这种特殊情况仅使用 C++11 标准。
标签: c++ multithreading c++11 mutex atomic