2

我很好奇存储/使用信号量的最佳方式。

以前,我一直使用存储在共享内存中的信号量(因为无论如何我已经在使用共享内存)作为,sem_t然后使用sem_init(),sem_wait()和来操作信号量。sem_timedwait()sem_post()

但是今天我正在阅读man页面并开始查看sem_get(),sem_ctl()等...我认为这将是节省声明共享内存的步骤以获取信号量的好方法。当我开始编写代码时,我意识到我找不到从 to 获取的sem_get()方法sem_t

如果我使用shm_get()我只能手动操作信号量sem_ctl()吗?这需要大量的开销,这些开销被sem_wait(),sem_timedwait()和所掩盖sem_post()

sem_t当你只有一个类型的变量时,有没有办法获得一个类型的变量key_t

4

1 回答 1

0

经过深入阅读,大多数 Linux 发行版都标配了两种类型的信号量;系统 VPOSIX。简而言之,System V是一个非常适合自己动手的工具,也许是“粗制滥造”的工具,而POSIX使用起来要简单得多。

我的问题源于我以前不知道二分法这一事实。sem_t它的友好工具来自POSIX家族,而shmget()来自shmctl()System V家族——它们不兼容,并且没有“开箱即用”的选择。

我正在寻找的解决方案是sem_open()and sem_close()。这允许 achar *name = "named_semaphore";识别信号量,而信号量又返回 的变量sem_t

于 2013-04-17T03:05:45.633 回答