同步 vs 线程安全集合 vs 原子包装器 类 vs 锁

Synchronizations vs thread safe collections vs atomic wrapper classes vs locks

我是并发编程的新手。当我浏览这些主题时,我对同步、线程安全集合、原子包装器 类、锁感到困惑。 锁和同步通过使一段代码线程安全来完成相同的工作。为什么我们需要线程安全集合或原子包装器 类 呢?由于锁定将仅允许单个线程访问代码,并且不会让集合或基本类型成为线程不安全的。

因为在使用同步的时候需要小心。如果你滥用它,你可能会遇到性能问题。尽可能使用线程安全集合通常可以提高性能,并且可以确保没有错误或死锁。

您问的这个问题范围很广。问题是,并不是所有这些东西都有一个单一的、严格的定义。例如,线程安全的集合可能会使用各种形式的同步(例如锁或原子操作)来实现线程安全。然而,甚至术语 "thread-safe" 也没有明确定义!

但是,有一件事你肯定弄错了:同步是目标,而锁、互斥锁、原子等是实现目标的手段。同步只是意味着不同的线程以同步的方式访问资源。换句话说,它们协调访问,这样它们就不会彼此进行不良交互。顺便说一句:我在这里谈论线程,但不同的实体也可以是进程甚至不同的计算机,但首先让我们保持简单。

现在,您询问 "thread safe collections or atomic wrapper classes" 的用途以及为什么需要它们。答案很简单,这些东西在更高层次上提供不同的接口或服务。例如,当我有一个连接两个线程的 FIFO 时,它们如何同步对底层队列的访问并不重要。如果两个线程的接口实现得当,您就可以获得一定的保证。仅使用锁手动执行此操作是可能的,但很复杂,因此除了低级原语之外,还提供这些作为高级构建块只会使软件开发更容易,结果更可靠。

最后,建议进一步的问题:正如最初提到的,并非所有术语都具有与之关联的普遍含义。因此,如果您提供其他信息,尤其是您打算使用的编程语言,将会有所帮助。