C++ 是不是有任何线程安全可以写入(比没有锁的线程安全类似物更快)组件?

Posted

技术标签:

【中文标题】C++ 是不是有任何线程安全可以写入(比没有锁的线程安全类似物更快)组件?【英文标题】:C++ Is there any threadsafe to write into (faster than not thread safe analogs busted with locks) component?C++ 是否有任何线程安全可以写入(比没有锁的线程安全类似物更快)组件? 【发布时间】:2011-08-20 22:18:33 【问题描述】:

所以我尝试了一些组件(映射、集合、向量、数组、队列等),我总是必须让 tham 线程安全……这让 tham 变慢了……是否有任何线程安全可写入组件?在 Boost 中还是在任何地方?

【问题讨论】:

如果你想要一般的线程安全,那么我相信 Boost 容器都没有提供这样的功能,你基本上必须序列化对整个容器的访问。如果不修改容器,不同元素的并发访问应该没问题。 请记住,C++ 本身是线程安全的,并且没有线程的概念。是否提供线程 API 取决于实现(当然,几乎所有 API 都提供)。如果您使用的是特定平台,我们可能会推荐针对特定平台的优化。 【参考方案1】:

您可以在英特尔的线程构建模块中找到一些。您还可以在 Microsoft 的 PPL 中找到一些。

【讨论】:

【参考方案2】:

您可以看看 Max Khiszinsky 的 libcds: Concurrent Data Structures

它包含高度通用/可配置的无锁容器和算法。它带有广泛的测试。我会说,文档大约是平均水平。

琐事 该库看起来已准备好进行提升,但 (AFAICT) 它取决于它可能包含的受专利保护的算法

【讨论】:

【参考方案3】:

Boost.Lockfree 最近正在接受 Boost 审核。我不知道这次审查的结果。

【讨论】:

以上是关于C++ 是不是有任何线程安全可以写入(比没有锁的线程安全类似物更快)组件?的主要内容,如果未能解决你的问题,请参考以下文章

对象锁的同步和异步

用 C++ 将 OpenCV 帧写入磁盘:单线程写入速度是不是受磁盘吞吐量以外的任何限制?

在没有任何锁的情况下加入另一个线程后是不是需要内存围栏?

从多个线程写入静态数据实际上是不是安全

Java 中的 volatile int 是线程安全的吗?

Linux下各种锁的理解和使用及总结解决epoll惊群问题(面试常考)