boost::named_mutex:最后一个进程关闭时安全清理

2023-12-08

我有一个资源,需要保护一个进程内以及多个进程之间的访问。我通过创建一个命名互斥体来管理这个问题boost::interprocess:named_recursive_mutex,而且效果很好。

#include <boost/interprocess/sync/named_recursive_mutex.hpp>
boost::interprocess::named_recursive_mutex mut(
    boost::interprocess::open_or_create, "MY_SHARED_MUTEX_123");

然而,据我了解,这最终应该通过remove(), ie:

mut.remove("MY_SHARED_MUTEX");

然而,这个调用似乎完全破坏了互斥体,而不是检查/减少引用计数,所以我试图找到一种安全的方法来发出remove()当我知道没有其他进程正在使用它时调用。我也可以通过 boost 创建一块共享内存,但这似乎也没有共享引用计数。

我在 SO 上发现了类似的问题, but 接受的答案似乎不足以满足我的需要,因为它只是指“增强文档”,但没有给出明确的指示何时remove()可以安全发行。

当我确定最后一个访问该互斥体的进程已关闭或可能崩溃时,如何安全地清理该互斥体?

谢谢。


There isn't any reference counting supported to my knowledge.

如果您使用 shell 脚本来启动或停止进程,则可以从脚本中删除启动/停止时的共享内存文件。

如果您有一个始终首先启动的进程,那么您可以使用它在程序启动时删除共享内存文件(或类似地在程序停止时最后一个停止进程中)。

Another approach would be implementing reference counting yourself using shared memory - last process would delete all shared memory files. However this won't work if one of the processes crash, you could still try removing in segfault signal handler but this may not always work too.

Update:正如@sehe提到的boost::interprocess::shared_ptr可用于引用计数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost::named_mutex:最后一个进程关闭时安全清理 的相关文章

随机推荐

  • 如何使用 webdriver 操作用户选择的文本?

    假设我的网页中有以下代码片段 p 这是一些文字 p 我希望 WebDriver 在该文本中选择 某些 就像用户选择它一样 我应该怎么做 我知道如何获得 p 元素 WebElement editable getDriver findEleme
  • 如何验证两个组件的值是否相同?日本科学基金会

    正如我们在 Asp Net 中有 CompareValidator 那么在 JSF 中我们有什么来验证两个字段的值是否相同 我想验证密码和确认密码字段 不 基本 JSF 实现中不存在这样的验证器 您基本上需要在last组的组成部分并抓住ot
  • 如何在绘图中向散点图添加固定的水平线和垂直线

    我有以下生成散点图的代码 我想添加代表 y 轴和 x 轴平均值的垂直线和水平线 我该怎么做 f lt list family Courier New monospace size 18 color 7f7f7f x lt list titl
  • JavaScript 刷新页面

    我有一个带有弹出按钮的 html 页面 如果我单击此按钮 则会弹出一个新窗口 我会在此窗口中进行所有更改 然后单击关闭按钮 关闭弹出窗口后 带有弹出按钮的 html 页面应该刷新 这可能吗 yes reload opener window
  • C# 中的方法签名

    下面的方法签名是什么 int DoSomething int a int b 返回类型是否是签名的一部分 返回类型不是 C 中方法签名的一部分 仅方法名称及其参数types 但不是参数names 是签名的一部分 例如 您不能使用以下两种方法
  • 如何使用反射检测字段上的“新”修饰符?

    http msdn microsoft com en us library 435f1dw2 aspx public class Base public string Field public class Child Base public
  • 使用定义的输入过程从 Fortran 中的二进制文件读取错误值

    我正在尝试编写一个简单的代码 它采用一些具有相同父抽象类的对象 将它们存储到二进制文件中并将它们读回 我的代码如下所示 module m implicit none type container class a allocatable it
  • R:从列表对象创建自定义输出

    我有一个存储不同数据类型和对象的列表 header lt This is a header a lt 10 b lt 20 c lt 30 w lt 1 10 x lt 21 30 y lt 51 60 z lt 0 9 mylist lt
  • 有没有办法检查函数输出是否分配给Python中的变量?

    在Python中 我想编写一个函数 如果它自己调用的话 它会将其结果漂亮地打印到控制台 主要用于交互使用或调试 出于这个问题的目的 假设它检查某事物的状态 如果我打电话 check status 我想看到类似的东西 Pretty print
  • nVarchar 和 SqlParameter

    我正在开发一个必须支持多种语言的应用程序 为了解决特殊字符问题 我在文本字段中使用 NVarhcar 所以我对文本字段的 SQL 查询是 insert into tbl text text values N Chci tan it v ob
  • Hmisc Latex功能需要去掉第一行

    我在 rmarkdown 文件中使用 Hmisc 当我创建一个表时 这就是我所做的 output pdf document r Arrests Stats results asis message FALSE warning FALSE e
  • Spring OAuth2 禁用 TokenEndpoint 的 HTTP 基本身份验证

    我从 Spring OAuth2 开始 到目前为止一切顺利 我已经通过配置保护了我的应用程序 但我有一个问题 我的客户端不支持 HTTP 基本授权 有没有办法禁用 oauth token 端点的 HTTP 基本身份验证 我想在 JSON 正
  • 修剪字符串开头和结尾的空格

    我正在尝试找到一种方法来修剪标题字符串开头和结尾的空格 我正在使用这个 但它似乎不起作用 title title replace s s g 有任何想法吗 注 截至 2015 年 所有主流浏览器 包括IE gt 9 都支持String pr
  • 使用 twinx 时定义宽高比

    如何设置使用的绘图的纵横比twinx 下面我举三个例子 without twinx突出显示我如何设置宽高比 仅与twinx说明如何重置先前定义的宽高比 我尝试定义两者的长宽比y使用时的轴twinx 这不起作用 我正在使用 matplotli
  • 在显示日期时,如何停止在 GridView 中显示时间?

    我正在开发一个 Web 应用程序 ASP NET 2 0 和 C 其中 我有一个从 Oracle 数据库获取数据的 gridview 我需要显示的一些数据是日期 但是当我的 gridview 中的日期显示如下时 2009 04 02 00
  • 传单圆半径根据 y/lng 坐标而变化

    我使用地图框 传单来显示人体图片而不是常规地图 我正在使用传单绘制 我需要能够创建一个圆并在保持其半径的同时移动它 然而 当我将其移向地图 屏幕底部时 大小呈指数级增加 我希望它保持相同的大小 我认为这与投影或 CRS 有关 但我不确定如何
  • jenkins 无法安装插件 - docker image

    以下是 jenkins 镜像 2 190 2 版本 中用于安装插件的相关片段 FROM jenkins jenkins 2 190 2 Add jenkins plugin COPY plugins txt usr share jenkin
  • 与 HashMap 一起使用[重复]

    这个问题在这里已经有答案了 我有一个 java 类 它将 servlet 属性设置为 HashMap 对象 request setAttribute types da getSecurityTypes where request是一个 Ht
  • 如何使用 JUnit 测试 ConfigurationProperties?

    这是我第一次使用外部化配置和 yaml 我创建了一个 yaml 其中使用类名作为 KEY 字段名称作为 VALUE YAML project test service computator exclude field from beeing
  • boost::named_mutex:最后一个进程关闭时安全清理

    我有一个资源 需要保护一个进程内以及多个进程之间的访问 我通过创建一个命名互斥体来管理这个问题boost interprocess named recursive mutex 而且效果很好 include