boost::interprocess_mutex 与进程本地 boost::mutex

Posted

技术标签:

【中文标题】boost::interprocess_mutex 与进程本地 boost::mutex【英文标题】:boost::interprocess_mutex vs process local boost::mutex 【发布时间】:2012-12-04 13:13:32 【问题描述】:

我正在开发一个在所有地方都使用boost::interprocess_mutexes 的项目,尽管该应用程序甚至从来没有fork()s 孩子,但严重依赖于多线程。

假设所有这些interprocess_mutexes 可以被进程本地互斥体替换而不破坏任何东西是否正确?

我认为这可能会提高性能(如果只是通过最小的因素)的假设是否正确?

在单个(可选多线程)进程中使用进程间同步是否有任何可以想象的理由?

【问题讨论】:

它是否使用共享内存?该内存是否被多个应用程序使用?这就是测试 - 它不必分叉,可能有不同的代码库(单独的可执行文件)共享一些资源。 (但如果不是,我会你可以使用普通的互斥锁) 【参考方案1】:

它是否使用共享内存或其他 IPC 机制?该内存是否被多个应用程序使用?那就是测试...

它不必分叉,可能有不同的代码库(单独的可执行文件)共享一些资源。例如,是否有一个监控应用程序或接口在应用程序通过某种 IPC 机制运行时从应用程序获取统计信息?请注意,可能还有其他更好的方法,这只是一个示例。

查看标题:

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/windows/mutex.hpp

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/posix/mutex.hpp

存在开销,将其替换为本地版本(如果安全)可以提高效率。不过,老实说,我对 Posix 的实现不太熟悉。

正如我上面所说,如果外部应用程序使用共享内存来获取统计信息或通信,您可能会使用 IPC - 但如果您不是这种情况,那么您可能可以替换它们。

【讨论】:

以上是关于boost::interprocess_mutex 与进程本地 boost::mutex的主要内容,如果未能解决你的问题,请参考以下文章