【发布时间】:2019-11-26 21:17:18
【问题描述】:
我需要为需要在 64 位和 32 位进程之间同步的项目实施某种阻塞等待。忙于等待共享内存变量会引入性能/调度问题,并且 POSIX 信号量似乎不支持 32 位和 64 位进程之间的 IPC。 Linux 上的进程间同步还有其他低开销的替代方案吗?
【问题讨论】:
-
你也许可以用
std::atomic<uint32_t>做一些事情,或者类似的事情。忘记使用比这更复杂的东西,比如std::mutex,因为你不能保证它在 32 位和 64 位代码之间兼容。对于简单的用例,简单的文件锁定方法也可能有效。 -
我曾考虑过文件锁定,但担心文件 I/O 开销。我还认为 C++11 std::atomic 仅用于 线程 之间的通信,而不是进程之间的通信。
-
您对“共享内存”的引用意味着像
std::atomic这样的东西将是一个选项。就文件锁定而言,实际磁盘 I/O 的可能性非常小,因为所有操作都将在缓冲内存中执行。编写一个循环来重写同一个文件,一千次包含几个字节。看看有多少磁盘活动实际上是由此产生的。 -
传统管道或 UNIX 套接字怎么样?
-
既然你在 Linux 上,你应该考虑Unix domain sockets。我知道它们比管道略快。