首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程安全数据结构类的用途是什么?

线程安全数据结构类的用途是什么?
EN

Stack Overflow用户
提问于 2013-08-30 04:05:40
回答 5查看 1.5K关注 0票数 0

AFAIK,多线程编程的一个主要目标是通过使用多个处理核来提高性能.重点是最大化并行执行。

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

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

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

因此,我认为线程安全在我的问题中包含了串行执行的定义。这就是为什么我对它的目的感到困惑,并问了这个问题。

EN

回答 5

Stack Overflow用户

发布于 2013-08-30 04:10:08

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

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

票数 6
EN

Stack Overflow用户

发布于 2013-08-30 04:07:54

线程安全数据结构可以在不序列化的情况下实现。这是一个棘手的问题,但它是可行的,而且已经完成。然后,您就有了并发性的好处,而没有任何瓶颈。

票数 3
EN

Stack Overflow用户

发布于 2013-08-30 04:13:33

这就是为什么性能关键的多线程代码避免使用“线程安全”容器的原因。像std::载体等容器并不是线程安全的。如果应用程序需要在不同线程之间共享对这些容器的访问,则应用程序负责管理该访问。

另一方面,有时性能不是多线程的驱动程序。GUI程序受益于将UI线程与正在执行工作的线程分开。其他的线程可能会由于各种原因而被剥离。一般来说,这样可以很好地分离代码中的职责,并为应用程序提供更好的整体活力。在这些情况下,目标往往不是高性能本身。对于这些应用程序来说,使用线程安全容器可能是一个非常自然的选择。

当然,最好的选择是吃蛋糕,就像一些无锁队列实现一样,它允许一个线程为队列提供数据,另一个线程使用它,而不需要锁定(仅依赖于某些基本操作的原子性质)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18524710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档