Unix 我们在哪里真正需要一组SystemV信号量?

Unix 我们在哪里真正需要一组SystemV信号量?,unix,operating-system,semaphore,sysv,Unix,Operating System,Semaphore,Sysv,每次我阅读semget的描述时:semget()系统调用返回与参数键关联的信号量集标识符。,我想知道哪里真正需要system V信号量集 我总是将nsems参数设置为1,因为大多数时候我需要一个信号量。即使我不需要二进制信号量,为什么我要创建一组5-6个信号量(比如说) 如果一个进程创建了一组6个与单个键关联的信号量,而另一个进程尝试在同一个键上执行semget,只要求3个信号量,该怎么办。也不是所有的6个信号量6个单独的二进制信号量。我口渴了两个月,一直在寻找这个问题的答案(当然不是连续的)

每次我阅读
semget的描述时:semget()系统调用返回与参数键关联的信号量集标识符。
,我想知道哪里真正需要system V信号量集

我总是将
nsems
参数设置为
1
,因为大多数时候我需要一个信号量。即使我不需要二进制信号量,为什么我要创建一组5-6个信号量(比如说)

如果一个进程创建了一组6个与单个键关联的信号量,而另一个进程尝试在同一个键上执行semget,只要求3个信号量,该怎么办。也不是所有的6个信号量6个单独的二进制信号量。我口渴了两个月,一直在寻找这个问题的答案(当然不是连续的)

我很抱歉,如果这个问题似乎是最愚蠢的一个,但除非我得到一个真正使用信号灯的例子,这个疑问将留在我的脑海中。我试图搜索一个示例C代码,其中有人正在使用一组信号量,但我找不到


如果你们能在这件事上帮助我,我真的非常感谢你们。提前感谢您。

我在一个DBMS上工作,该DBMS使用一个信号量,用于处理相同数据的一组协作进程中的每个进程,通过共享内存进行协作。必须一次分配一个将是一个麻烦;将一个信号量设置为20个(或其他)信号量非常方便。

我所知道的信号量最典型的情况是,一个或多个处理线程正在处理一个数据队列。每个线程都会减少从队列中删除的每个条目的信号量,当新数据放入队列时,信号量会增加。然后,您需要做的就是等待信号量,而不是不断轮询更新。

这样,如果我有一个程序,其中需要5个信号量来保护5个资源,那么我可以使用一个键和一个信号量id来访问所有资源。但在这种情况下,如果我也有一个子进程,它执行semget并只请求这5个信号量中的3个,会发生什么呢。我现在就要试试,即使我这么认为。因此,基本上也是为了节约资源。因为如果使用一个信号量集为20个信号量取1个键,那么比为这些信号量取20个键和20个ID更好,并且处理它们就像处理20个整数。sem1,sem2,sem3…sem20。你能告诉我另一个例子吗?(我同意你的答案,所以我投票赞成)@Anirudh:不;我没有其他的例子。这是我所知道的唯一一个使用信号量集且集大小大于1的程序。那么您正在描述一个系统,其中所有线程都使用一个信号量?或者每个线程都有一个信号量的位置?每个队列都使用一个信号量。多个线程可以处理单个队列中的数据,但如果您有多个队列,则需要多个信号量,以便唤醒正确的线程。