C 信号量没有以前那么有意义,我知道它们是如何工作的
好的,所以我开始自己学习信号灯,因为我们上的课教得不多(这是一个不会说英语的老师的助手,我花了11500美元) 不管怎样,我知道了如何使用信号灯,并开始了关于睡眠理发师问题的研究 理发师在枕头上等着有人把它发出去。客户等待理发师贴上“安全带”,表示客户可以离开 无论如何,在意识到信号量不会在进程之间共享后,我回到了赋值,因为它们不是线程。随赋值一起提供的是函数C 信号量没有以前那么有意义,我知道它们是如何工作的,c,semaphore,C,Semaphore,好的,所以我开始自己学习信号灯,因为我们上的课教得不多(这是一个不会说英语的老师的助手,我花了11500美元) 不管怎样,我知道了如何使用信号灯,并开始了关于睡眠理发师问题的研究 理发师在枕头上等着有人把它发出去。客户等待理发师贴上“安全带”,表示客户可以离开 无论如何,在意识到信号量不会在进程之间共享后,我回到了赋值,因为它们不是线程。随赋值一起提供的是函数semget、semop和semctl的描述,这些函数以structs作为参数,即使有解释,也是非常稀疏的 这些描述直接与我在其他网站上的
semget
、semop
和semctl
的描述,这些函数以structs
作为参数,即使有解释,也是非常稀疏的
这些描述直接与我在其他网站上的发现相反,这些网站使用sem\u open
打开一个作为信号量的“文件”
无论如何,我想我的问题是:
发送到sem*
函数的“键”是什么?有时它被设置为IPC_PRIVATE,有时它被用作信号量的描述符
我认为这些资源让我更加困惑,而不是它们所帮助的键在整个SysVIPC子系统中使用,它们是通过函数从路径名派生的数字标识符
您可以在手册页或。中找到有关SysV信号量的更多详细信息。好的-因此我认为问题在于我将SysVIPC信号量与另一种类型的信号量混淆了-SysVIPC之前使用的任何信号量。这能解释我的问题吗?SysVIPC信号量(用sem*函数操作)比较旧。POSIX信号量(使用sem_*函数操作)更新、更简单、性能更高,但功能也不太强大(没有自动撤销操作,也没有对信号量组执行原子操作)。但是,未命名的POSIX信号量(参见sem_init手册页)也可以跨多个进程共享——您只需使用共享内存并将其标记为共享信号量即可。这些都在手册页上。那一段把一堆理解带到了一起,变成了实际有用的信息——谢谢!