C 信号量没有以前那么有意义,我知道它们是如何工作的

C 信号量没有以前那么有意义,我知道它们是如何工作的,c,semaphore,C,Semaphore,好的,所以我开始自己学习信号灯,因为我们上的课教得不多(这是一个不会说英语的老师的助手,我花了11500美元) 不管怎样,我知道了如何使用信号灯,并开始了关于睡眠理发师问题的研究 理发师在枕头上等着有人把它发出去。客户等待理发师贴上“安全带”,表示客户可以离开 无论如何,在意识到信号量不会在进程之间共享后,我回到了赋值,因为它们不是线程。随赋值一起提供的是函数semget、semop和semctl的描述,这些函数以structs作为参数,即使有解释,也是非常稀疏的 这些描述直接与我在其他网站上的

好的,所以我开始自己学习信号灯,因为我们上的课教得不多(这是一个不会说英语的老师的助手,我花了11500美元)

不管怎样,我知道了如何使用信号灯,并开始了关于睡眠理发师问题的研究

理发师在枕头上等着有人把它发出去。客户等待理发师贴上“安全带”,表示客户可以离开

无论如何,在意识到信号量不会在进程之间共享后,我回到了赋值,因为它们不是线程。随赋值一起提供的是函数
semget
semop
semctl
的描述,这些函数以
structs
作为参数,即使有解释,也是非常稀疏的

这些描述直接与我在其他网站上的发现相反,这些网站使用
sem\u open
打开一个作为信号量的“文件”

无论如何,我想我的问题是:

发送到
sem*
函数的“键”是什么?有时它被设置为IPC_PRIVATE,有时它被用作信号量的描述符


我认为这些资源让我更加困惑,而不是它们所帮助的

键在整个SysVIPC子系统中使用,它们是通过函数从路径名派生的数字标识符


您可以在手册页或。

中找到有关SysV信号量的更多详细信息。好的-因此我认为问题在于我将SysVIPC信号量与另一种类型的信号量混淆了-SysVIPC之前使用的任何信号量。这能解释我的问题吗?SysVIPC信号量(用sem*函数操作)比较旧。POSIX信号量(使用sem_*函数操作)更新、更简单、性能更高,但功能也不太强大(没有自动撤销操作,也没有对信号量组执行原子操作)。但是,未命名的POSIX信号量(参见sem_init手册页)也可以跨多个进程共享——您只需使用共享内存并将其标记为共享信号量即可。这些都在手册页上。那一段把一堆理解带到了一起,变成了实际有用的信息——谢谢!