【发布时间】:2011-05-27 00:58:09
【问题描述】:
我的程序使用共享内存并用信号量保护它以与同一程序的其他实例进行通信。我担心共享内存和信号量的安全性。
如何确保我使用的信号量和 shm 不会被其他会搞砸的程序打开?有一种方法可以在具有自己的用户组的单独用户下运行程序,并通过限制共享对象只能由该用户和组访问来保护共享对象。这是我问题的答案,还是有一些陷阱,可能在 Windows 上?
-
如果我必须在同一用户下运行所有程序,或者如果某些程序以 root 身份运行(总是有这样的程序,不是吗),有什么方法可以保护它们吗?
-
我开始为希望一起通信的所有实例设置 shm 和信号量的默认“密钥”。但是可能有不同的程序已经使用了“密钥”。有什么技术可以解决这样的问题吗?我正在考虑选择一个“键”范围(即键将是 1000 - 2000 范围内的整数),如果程序无法获取默认值的键,它会尝试从该范围中获取其他键。
我找到了相关问题here,但它并没有说明我的问题 2 和 3。除了那个问题之外,我找不到任何与 shm 和信号量冲突和保护相关的内容,似乎用处不大在编写程序时考虑。
我的情况是我有一个程序想要与同一程序的其他实例进行通信。存在运行同一程序的多个实例的“组”,其中一个“组”的程序一起通信,而另一个“组”中的程序一起通信。它们通过受信号量保护的共享内存进行通信。程序可以在各种 *nix 平台和 Windows 上运行。它们应该在几年内 24/7 全天候运行,并且应该可靠且安全,这就是我担心这些冲突的原因。
【问题讨论】:
标签: c++ ipc semaphore shared-memory conflict