线程之间的“竞争条件”:作用于同一个mutable数据上的多个线程,彼此之间存在对该数据的访问竞争并导致interleaving,导致post-condition可能被违反,这是不安全的。
线程安全:ADT或方法在多线程中要执行正确。
一、Confinement 限制数据共享
核心思想:线程之间不共享mutable数据类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200715154352441.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2F4ejE1OTgyNDY=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/202007151544213.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2F4ejE1OTgyNDY=,size_16,color_FFFFFF,t_70)
避免使用全局变量
二、Immutability 共享不可变数据
使用不可变数据类型和不可变引用,避免多线程之间的race condition。
对于并发编程,这种隐藏的变化有时是不安全的,如果ADT中使用了beneficent mutation,必须要通过“加锁”机制来保