semaphore信号量
1、信号量是什么
1.1 简介
信号量是并发与竞争的一种解决方法之一,在应用层和内核层都有相应的信号机制。可以这么理解:当一个线程获得信号量后,该线程会往下运行,如果线程获取不到信号量,它就会原地休眠,等待其他线程释放了信号量,就好比“发信号”把它给唤醒继续往下运行,线程释放信号量后其值会加1,获取到信号量后其值会减1,当信号量为0的时候,线程会阻塞等待其他线程释放信号量。
1.2 信号量与自旋锁区别
- 休眠:使用自旋锁时尽量不要长时间阻塞或休眠,信号量等待时会引起休眠,它适合长时间占用资源的情景,避免频繁切换引起资源的开销;
- 中断:自旋锁可以在中断里使用,由于信号量会使进程/线程进入休眠,所以信号量不能在中断里使用;
1.3 信号量的API函数
在文件include/linux/semaphore.h、kernel/locking/semaphore.c中有定义: