同步手段:mutex、自旋锁、原子操作、条件变量、信号量、barrier(内存屏障)
mutex:尝试获取锁,如果获取不到,内核将此线程放入队列、此线程休眠、当锁释放后,内核将mutex取出
自旋锁:一直处于忙的状态,相对于Mutex
不会挂起,此线程一直检测锁是否释放,释放获取锁,效率比mutex高,因为没有从挂起状态到运行状态的切换
CAS的原子操作:在任意时刻又且仅能有一个线程对某个变量操作是成功的,其他的线程只能的等待
原子操作的实现原理,有两种实现方案
第一种实现方案:
cpu和内存通过总线通信,cou会将总线锁住
第二种实现方案:
cpu会将一些常用的变量缓存在cpu缓存中,cpu锁住这些缓存
其中第一种方案会使程序变慢、而第二种有的CPU会不支持
条件变量:略
信号量:略
barrier内存屏障