0

每次我阅读 的描述时semget: The semget() system call returns the semaphore set identifier associated with the argument key.,我都想知道我们在哪里真正需要一组 System V 信号量。

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

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

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

如果你能帮助我解决这个问题,我会非常感谢你们。提前感谢一吨。

4

3 回答 3

2

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

于 2011-02-20T12:55:30.787 回答
0

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

于 2011-02-20T12:56:52.397 回答
0

我在大学的操作系统课程的作业中使用了一组信号量。

任务是创建一个生成客户端的服务器。客户端可以发送请求并从服务器接收响应。一次只有一个客户端可以向服务器发送请求。

所以我使用了三个信号量:

  • 1 作为互斥体(初始化为 1),仅在客户端之间使用
  • 1 用于客户端和服务器之间的请求。
  • 1 用于响应,在服务器和客户端之间
于 2021-12-11T19:04:46.553 回答