c++ - 线程安全数据结构类的目的是什么?

标签 c++ multithreading thread-safety

<分区>

据我所知,多线程编程的一个主要目标是通过利用多个处理核心来提高性能。重点是最大化并行执行。

当我看到线程安全的通用数据结构类时,我觉得有些讽刺。因为线程安全意味着强制串行执行(锁、原子操作或其他),所以它是反并行的。线程安全的意味着序列化被封装并隐藏到类中,因此我们将有更多机会强制串行执行——损失性能。最好在更大(或最大)的单元(应用程序逻辑)中管理这些关键部分。

那么为什么人们需要线程安全类呢?它们的真正好处是什么?


附言 我的意思是线程安全类是一个只有线程安全方法的类,可以安全地从多个线程同时调用。 安全 意味着它保证正确的读/写结果。 正确表示其结果与单线程执行下的结果相同。 (例如避免 ABA 问题)

所以我认为术语线程安全在我的问题中根据定义包含串行执行。这就是为什么我对其目的感到困惑并提出这个问题的原因。

最佳答案

我认为您提出的问题有一个错误的假设:同步操作根本不是反并行的。如果没有某种形式的同步,根本无法构建并行可变数据结构。是的,大量使用这些同步机制会降低代码并行运行的能力。但是如果没有这些机制,就不可能首先编写代码。

一种不需要同步的线程安全数据结构形式是不可变值。然而,它们只适用于部分场景(并行读取、数据传递等......)

关于c++ - 线程安全数据结构类的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524710/

相关文章:

c++ - 当我收到此错误 : <mutex> is not supported when compiling with/clr 时如何实现非托管线程安全集合

c++ - 具有非常快速的 int-> 数据查找和快速反向查找(搜索/插入/删除数据)的压缩字典?

c++ - 无法使用带有 g++ 的 -std 标志进行编译

java - 我需要使用 volatile 吗?

c - 作业——reader写appender信号量

ruby-on-rails - 使用 Rails 运行多个后台并行作业

c# - 在ConcurrentQueue中入队和TryDequeue

c++ - Visual C++ - 从设置表单图标中抛出未处理的异常?

c++ - GetDIBits 并使用 X、Y 遍历像素

c# - NHibernate SessionFactory 线程安全问题