一:概述
在并发领域,有许多成熟的设计模式。它们不仅用于处理共享和修改时的同步挑战,还涉及并发架构。本文将从总体上介绍这些模式。
在并发领域,一个至关重要的术语是数据竞争,什么是数据竞争?数据竞争指的是至少有两个线程同时访问一个共享变量,并且至少有一个线程试图修改该变量。如果程序存在数据竞争,它将导致未定义行为。这意味着任何结果都有可能发生,因此程序的行为将变得无法预测和推理。
数据竞争的一个必要条件是可变的共享状态。如果你能够妥善处理共享或修改,就不会发生数据竞争。这正是同步模式所关注的重点。除此之外,还有其他并发设计模式,如活动对象(Active Object)和监视器对象(Monitor Object)。
二:同步模式介绍
同步模式的重点在于处理数据共享和数据修改问题。
1. 处理共享问题
如果不进行共享,就不会发生数据竞争。不共享意味着每个线程仅操作局部变量。这可以通过值拷贝、线程特定存储(Thread-Specific Storage),或者通过受保护的数据通道将线程的计算结果传递给其对应的 Future 来实现。
1.1 值拷贝(Copied Value)
如果一个线程通过拷贝(而不是引用)获取参数,那么就不需要对数据的访问进行同步。这样可以避免数据竞争,同时也不会引发对象的生命周期问题。