(二)内核锁的使用之信号量【转】

简介:

转自:http://blog.csdn.net/lixiaojie1012/article/details/23708377

信号量是一种睡眠锁,也就是说我调用了获取信号量的接口,但是这个时候信号量获取不到,那么对应的任务就会睡眠,从而让出cpu运行其他程序;一旦有人释放的信号量,都会重新出发任务调度,能获取到信号量的任务就会得到机会执行。上节中所说的自旋锁是非睡眠锁,他会一直占有CPU直到获取到对应的锁。

 

1、计数信号量

 

计数信号量创建时,资源可以设置为大于1,这个时候就可以有多个任务获取到信号量从而得到访问资源的机会;举个例子,银行有5个业务窗口,这就好比值为5的信号量,这个时候可以有5个人可以同时得到服务,第6个往后就得等待信号量的释放了,直到有人办完业务(释放信号量),他才能去办理业务(访问资源);

 

2、二值信号量

 

如果计数信号量的值为1,那么就是二值信号量了,他可以用来做同步,也可以用来做互斥;

作为同步使用时,通常是中断和任务搭配完成的,任务一般是一个死循环,最开始是一个down信号量的操作,通常情况下任务会卡在此处,当配对的中断到来时,也就意味着任务到了运行的时机,这个时候中断上下文中会释放一个信号量,中断上下文退出时,任务就会被调度到执行。

 

此外,内核中还有一种同步方法叫完成变量;对应的接口分别是wait_for_completion()和complete(),主要使用在一个任务发出信号通知另一任务发生了某个特定事件,从而使两个任务得到同步;等待方调用wait_for_completion(),通知方调用complete(),函数声明在<linux/completion.h>中,感兴趣的同学可以去看一下具体实现。










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5333663.html,如需转载请自行联系原作者

相关文章
|
7月前
|
Linux 程序员 API
POSIX互斥锁自旋锁
POSIX互斥锁自旋锁
83 0
|
7月前
|
安全 Linux 调度
【linux线程(二)】线程互斥与线程同步
【linux线程(二)】线程互斥与线程同步
|
7月前
|
Linux
【Linux C 几种锁的性能对比】 1.读写锁 2.互斥锁 3.自旋锁 4.信号量 5.rcu
【Linux C 几种锁的性能对比】 1.读写锁 2.互斥锁 3.自旋锁 4.信号量 5.rcu
|
7月前
|
Linux
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
201 0
Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量详解
|
存储
信号量(下)
信号量(下)
44 0
|
存储 缓存 安全
Linux下线程同步(带你了解什么是互斥锁、死锁、读写锁、条件变量、信号量等)
Linux下线程同步(带你了解什么是互斥锁、死锁、读写锁、条件变量、信号量等)
282 0
|
机器学习/深度学习 C语言
信号量
信号量
91 0
|
存储 网络协议 API
4-FreeRTOS队列、互斥、信号量
4-FreeRTOS队列、互斥、信号量
|
Linux 调度 数据库
【Linux线程同步专题】一、什么是线程同步、互斥量与死锁
【Linux线程同步专题】一、什么是线程同步、互斥量与死锁
137 0
自旋锁和互斥锁区别
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81057190 POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。
1086 0