内核同步有哪些机制?
1.原子操作(不可分割)
原子操作是其他同步方法的基石;
原子整数最常见的用途就是实现计数器;
2.自旋锁(spin lock)
自旋锁的特性:
自旋锁最多只能被一个执行线程持有;
若有执行线程去尝试获取已经被持有的自旋锁,会自旋(占着cpu空转);
利用自旋锁的特性:为多处理器机器提供了防止并发访问所需的保护机制;
使用自旋锁的初衷:
在短时间内进行轻量级加锁;
处理对锁争用的方式:
让请求锁的执行线程睡眠,直到请求的锁可用,再唤醒线程;
自旋锁方法的实现?
自旋锁的实现同体系结构密切相关,代码往往通过汇编实现;
自旋锁的使用:
在中断处理程序中可使用自旋锁(不会休眠;提前禁本地中断)
2.信号量
Linux中,信号量是一种睡眠锁;
若有一个任务试图获得一个不可用(已经被占用)的信号量,信号量会将其推进一个等待队列,让其睡眠;
信号量的创建和初始化
信号量的使用
3.互斥锁
4.完成变量