同步机制应该遵循的准则
实现同步要考虑线程的三个特性
- 原子性
- 可见性
- 有序性
一般是volatile+CAS实现了多线程的三个特性:原子性,可见性,有序性,如下图
临界区
提到并发编程,首先就想到临界区(critical section)这个概念,临界区是线程中访问临界资源的一段需要互斥执行的代码。
临界资源
临界资源是指线程之间共享的资源,但不同的执行序列结果不确定的,这也叫做竞态条件(race condition)。
管程
一种实现同步机制的架构模式,可以理解为对一种复杂场景信号量使用的封装。
信号量
信号中包括一个整形变量,和两个原子操作P和V,其原子性由操作系统保证,这个整形变量只能通过P操作和V操作改变。
夺取锁的方式
- 文明方式(按照队列排队的方式,实现排队的时候其实也是抢着排队)
- 野蛮方式(暴力循环,也叫自旋)