【问题标题】:C++ Atomic/Mutex What way to follow?C++ Atomic/Mutex 遵循什么方法?
【发布时间】: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


【解决方案1】:

Atomic 更适合这种情况。原子是CPU专门支持的一种操作,而其他类型的线程控制往往是由操作系统或其他措施实现的,并且会产生更多的开销。

编辑:快速搜索会显示这个有更多信息并且基本上是相同类型的问题:Which is more efficient, basic mutex lock or atomic integer?

编辑 2:这里有更详细的文章 http://www.informit.com/articles/article.aspx?p=1832575

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2016-04-26
    • 2018-07-27
    • 2010-12-30
    • 2020-09-21
    相关资源
    最近更新 更多