【问题标题】:is there a non-file-based named mutex in boostboost 中是否有基于非文件的命名互斥锁
【发布时间】:2011-03-14 09:50:34
【问题描述】:

在 boost 中是否有一个非基于文件的命名互斥锁?我的问题是,如果进程崩溃,文件不会被删除。该文件甚至可以在重新启动后继续存在。

问候, 托比亚斯

【问题讨论】:

  • 是否需要在进程之间共享互斥锁? (如果您询问的是 named 互斥体,我想您会这样做,但最好清楚)。您使用的是 Windows 还是 Unix(as 行为与创建的内容可能不同)?
  • 是的,我需要在进程之间共享。主要用途是在 Win32 上,但更可取的是便携式解决方案,因此问题在于提升解决方案。

标签: c++ boost mutex


【解决方案1】:

对于 Windows,可以使用 boost::interprocess::ipcdetail::winapi_mutex_wrapper,因为它不是基于文件的

【讨论】:

【解决方案2】:

Boost.Interprocess 提供以下互斥锁类型:

#include <boost/interprocess/sync/interprocess_mutex.hpp>

interprocess_mutex:非递归的匿名互斥锁,可以放置在共享内存或内存映射文件中。

#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>

interprocess_recursive_mutex:一个递归的匿名互斥体,可以放置在共享内存或内存映射文件中。

#include <boost/interprocess/sync/named_mutex.hpp>

named_mutex:一个非递归的命名互斥体。

#include <boost/interprocess/sync/named_recursive_mutex.hpp>

named_recursive_mutex:一个递归的,命名互斥体。

我建议使用命名互斥体。见docs

【讨论】:

  • named_mutex(至少在默认设置中)创建一个文件。这不是我想要的,因此是我的问题。
  • 是的,我的错。我检查了 1.46 分支中的实现(看看 ) - 它在共享内存中创建文件。
  • 可能是boost::thread::mutex 完成这项工作。不过我没用过
猜你喜欢
  • 1970-01-01
  • 2022-06-13
  • 2018-06-10
  • 2010-12-26
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2023-03-30
相关资源
最近更新 更多