前言
当多个线程同时访问某个类时,不管采取何种线程调度方法
,在主调代码中不需要采取额外的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的.
线程安全的三个特性
- 可见性 : 一个线程对
主内存
的修改会被其他线程所看到. - 原子性: 提供了
互斥访问
,同一时刻只能有一个线程来对它进行操作.
- 有序性: 编译器和处理器可能会为了性能对
操作指令进行重新排序
,重新排序后对单个线程的程序执行不会有影响,但对多个线程
的程序执行却会造成影响.
一.缓存导致的可见性问题
在多核cpu时代,cpu缓存的同步
会导致共享变量的操作结果在多个线程之间不可见(线程的主内存与工作内存同步
),进而导致并发问题。
int count=