我试图了解使用相同的 System Vkey_t
值来分配共享内存缓冲区 viashmget()
和信号量 via的含义semget()
。这是否存在任何冲突,即我应该为共享内存缓冲区和信号量分配一个单独的键值吗?或者信号量和共享内存是否不同?也许它们是不同的,但在某种程度上相关?换句话说,如果同时调用semget(0x1000, 1, IPC_CREAT|0660)
and会发生什么shmget(0x1000, 1, IPC_CREAT|0660)
?
我知道键是系统范围的值。我也明白这ftok()
是产生key_t
价值的标准方式,但这不在我的控制之下。
上下文:我编写了一些处于高级开发状态的代码,它调用使用 System V IPC shmget
/构建的例程semget
。我的代码使用固定的信号量 ID(在内部转换为键),事实证明,它与在其他地方使用的固定共享内存 ID(也在内部转换为键)具有相同的数值。直接的问题是,我是否需要修改我的代码以在信号量和共享内存缓冲区中分配唯一 ID,或者保持原样(仅在信号量中唯一);更大的问题是,这是我未来需要注意的一个警告。使用当前代码,没有错误,到目前为止的测试也没有发现任何问题,但这并不意味着不会出错。