我是并发编程的新手。当我浏览这些主题时,我在同步、线程安全集合、原子包装器类和锁之间感到困惑。锁和同步通过使一段代码线程安全来完成相同的工作。那么为什么我们需要线程安全的集合或原子包装器类呢?因为锁定将只允许单个线程访问代码,并且不会让集合或基本类型成为线程不安全的
你问的问题很宽泛。问题是,并不是所有这些东西都有一个单一的、严格的定义。例如,线程安全的集合可以使用各种形式的同步(例如锁或原子操作)来实现线程安全。然而,甚至连"线程安全"这个术语都没有明确定义!
然而,有一件事你肯定错了:同步是目标,而锁、互斥锁、原子等是实现同步的手段。同步只是意味着不同的线程以同步的方式访问资源。换句话说,它们协调访问,这样它们就不会相互影响。顺便说一句:我在这里说的是线程,但不同的实体也可以是进程,甚至是不同的计算机,但让我们先保持简单。
现在,您询问了"线程安全集合或原子包装类"的使用,以及为什么需要它们。答案很简单,这些东西在更高的层次上提供不同的接口或服务。例如,当我有一个FIFO连接两个线程时,它们如何同步对底层队列的访问并不重要。如果这两个线程的接口得到了正确的实现,就可以得到一定的保证。手动使用锁是可能的,但很复杂,因此除了低级原语之外,还提供这些高级构建块只会使软件开发更容易,结果更可靠。
最后,对于进一步的问题有一个建议:正如最初提到的,并不是所有的术语都有一个普遍的含义。因此,如果您提供额外的信息,例如您打算使用的编程语言,将会有所帮助。
因为在使用同步时需要小心。如果你滥用它,你可能会有性能问题。在可能的情况下使用线程安全的集合通常会提高性能,并确保没有错误或死锁。