linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?

时间:2021-07-19 05:10:00
本人目前初学linux驱动,在设备并发控制中的信号量的使用存在这样的疑惑,首先我觉得信号量应该是原子操作和自旋锁的一种结合并优化的机制(优化在于它不是自旋锁的忙等而是睡眠)。所以我想当信号量在初始化的时候如果设置的值不是1而是大于1
的值,比如说是2,那是不是和 原子操作一样能有两个 进程同时获得这个信号量呢?还是其它的什么情况?求各位大虾们,解释指教!

4 个解决方案

#1


引用楼主 xiezhunben 的回复:
本人目前初学linux驱动,在设备并发控制中的信号量的使用存在这样的疑惑,首先我觉得信号量应该是原子操作和自旋锁的一种结合并优化的机制(优化在于它不是自旋锁的忙等而是睡眠)。所以我想当信号量在初始化的时候如果设置的值不是1而是大于1
的值,比如说是2,那是不是和 原子操作一样能有两个 进程同时获得这个信号量呢?还是其它的什么情况?求各位大虾们,解释指教!

你说的没错,必须初始化为1.

#2


大于1就是可以有多个
但是无法保证数据不出问题

实际驱动一般不会这么用,  可以用其他代替,如读写锁==

#3


当同一资源的数量为N时,意味能够允许N个进程同时使用该资源,此时,可以设置相应信号量的初值为N。
如果资源只有一个,且互斥使用时,信号量的初值必须为1。
原子操作的概念与信号量的初值概念无关,说的是一小段程序操作不能被打断。

#4


谢谢各位的回答,按照你们说的也就是说我的理解是对的咯!呵呵!

#1


引用楼主 xiezhunben 的回复:
本人目前初学linux驱动,在设备并发控制中的信号量的使用存在这样的疑惑,首先我觉得信号量应该是原子操作和自旋锁的一种结合并优化的机制(优化在于它不是自旋锁的忙等而是睡眠)。所以我想当信号量在初始化的时候如果设置的值不是1而是大于1
的值,比如说是2,那是不是和 原子操作一样能有两个 进程同时获得这个信号量呢?还是其它的什么情况?求各位大虾们,解释指教!

你说的没错,必须初始化为1.

#2


大于1就是可以有多个
但是无法保证数据不出问题

实际驱动一般不会这么用,  可以用其他代替,如读写锁==

#3


当同一资源的数量为N时,意味能够允许N个进程同时使用该资源,此时,可以设置相应信号量的初值为N。
如果资源只有一个,且互斥使用时,信号量的初值必须为1。
原子操作的概念与信号量的初值概念无关,说的是一小段程序操作不能被打断。

#4


谢谢各位的回答,按照你们说的也就是说我的理解是对的咯!呵呵!