参考答案
Linux的内核锁主要是:自旋锁、信号量。
1. 自旋锁
- 自旋锁最多只能被一个可执行线程持有.
- 如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。
- 如果锁未被争用,请求它的执行线程便能立刻得到它并且继续进行,自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
2. 信号量
- 自旋锁是一种睡眠锁。
- 如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠,这时处理器获得自由去执行其它代码。
- 当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。
- 信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况,只能在进程上下文中使用,因为中断上下文中是不能被调度的。当代码持有信号量时,不可以再持有自旋锁。
以上,是【Linux中主要有哪几种内核锁】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—