boost::进程间线程安全吗?

2024-01-29

目前,我有 2 个进程使用 message_queue 和共享内存形式 boost 进行通信。一切都按参加的方式进行。

现在我需要使这个进程之一成为多线程(再次感谢boost),我想知道是否需要在线程之间使用保护机制(例如互斥体),或者boost::interprocess库是否已经提供了保护机制 ?

我在 boost 文档中没有找到任何相关信息。顺便说一句,我用的是boost 1.40。

提前致谢。


boost::interprocess 中的共享资源(共享内存等)要求您提供必要的同步。这样做的原因是您可能不需要同步,并且通常在操作性能方面会有些昂贵。

举例来说,您有一个进程以 32 位整数格式将某些内容的当前统计信息写入共享内存,还有一些进程读取这些值。由于这些值是整数(因此在您的平台上,读取和写入是原子的)并且您有一个写入它们的进程和几个读取它们的进程,因此此设计不需要同步。

然而,在某些示例中,您将需要同步,例如上面的示例有多个编写器,或者如果您使用字符串数据而不是整数。 boost 内部有各种同步机制(以及非 boost 同步机制,但由于您已经使用 boost),如下所述:

[稳定版本的提升信息:1.48]http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/synchronization_mechanisms.html http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/synchronization_mechanisms.html

[您使用的版本的提升信息:1.40]http://www.boost.org/doc/libs/1_40_0/doc/html/interprocess/synchronization_mechanisms.html http://www.boost.org/doc/libs/1_40_0/doc/html/interprocess/synchronization_mechanisms.html

对于共享内存,通常的做法是将同步机制放置在共享内存段的基础上,它可以是匿名的(意味着操作系统内核不提供按名称对其进行访问)。这样,所有进程都知道如何锁定共享内存段,并且您可以将锁与其段相关联(例如,如果您有多个)

请记住,互斥锁需要与锁定它的相同的执行线程(在进程内)来解锁。如果需要从不同的执行线程锁定和解锁同步对象,则需要信号量。

请确保,如果您选择使用互斥锁,它是进程间互斥锁 (http://www.boost.org/doc/libs/1_48_0/doc/html/boost/interprocess/interprocess_mutex.html),而不是boost线程库中的互斥体适用于具有多个线程的单个进程。

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

boost::进程间线程安全吗? 的相关文章

随机推荐

  • 即使与 libole32 链接,外部库中也未定义 OLE 引用

    使用 MINGW 我尝试将我的 C 代码与执行一些 OLE 操作的静态 C 库链接 mingw32 gcc main o resources o o mbcom exe L Lib Iup liup liupole lole32 lcomc
  • ggplot2:从包含geom_histogram的绘图对象读取最大条形高度

    像这样上一张海报 https stackoverflow com questions 7611691 relative positioning of geom text in ggplot2 我也在用geom text在 gglot2 中注
  • 远程 emacs 客户端连接,但不在终端中创建新框架

    我以 TCP 模式配置并启动了 emacs 服务器 Added setq server host 10 16 184 33 and setq server use tcp t 到 emacs ran emacs daemon 在同一主机上
  • 在 Django 模板中调用 Python 函数

    在 django 模板内 我尝试对其中一个模板变量调用 split 函数 然后获取最后一个元素 所以我做了如下操作 newsletter NewsletterPath split 1 不幸的是 它不喜欢分裂 有些人可能建议我在视图中进行拆分
  • 使用 NiFi 更新 CSV 内字段中的值

    我想实现一个简单的用例 使用 NiFi 将 CSV 内字段中的多个字符串 文本值更新为整数值 例如 我的 CSV 文件如下所示 输入 CSV 文件 字段 1 字段 2 美国 苹果 美国 苹果 印度 葡萄 中国城 奥兰治 澳大利亚民族 桃子
  • 如何让 QLabel 扩展到全宽?

    我想要一个QLabel无论内容如何 都扩展到容器的整个宽度 我想要这个 因为我动态设置文本并稍后添加小部件 这导致它切断部分文本 Widget Widget QWidget parent QWidget parent this gt set
  • 使用宏对数据集中的列按组求和

    我有一个数据集 如下所示 Month Cost Center Account Actual Annual Budget June 53410 Postage 13 234 June 53420 Postage 0 432 June 5343
  • javascript中div的随机位置

    我正在尝试使用 javascript 使 Div 随机出现在网页上的任何位置 因此 一个 div 出现然后消失 然后另一个 div 出现在页面上的其他位置然后消失 然后另一个 div 再次出现在页面上的另一个随机位置然后消失 依此类推 我不
  • 使用 csv 文件进行 Flyway 特定迁移

    我们正在使用 Flyway 通过 sql 脚本在我们的测试环境中保持最新的许多数据库 并且它工作得很好 但我们还特别需要使用 csv 文件更新数据库 我知道 Flyway 提供了一些基于 Java 的迁移来处理更复杂的更新 但问题是这些 J
  • 如何读取基于EMV的智能VISA卡详细信息

    我正在尝试从 VISA 卡读取信用卡数据 但无法成功 正如在互联网资源中我发现对于 MASTER 卡 我们可以使用 1PAY SYS DDF01 文件选择 PSE 目录 然后阅读记录 但对于 VISA 来说 它不是强制性的 当我使用 SEL
  • WeakReference 的 Java 文档中的矛盾

    这个问题是关于理解Java文档中WeakReference的问题 当我读到Java的WeakReference时 我在文档中看到了这样一句话 假设垃圾收集器在某个时刻确定 对象弱可达的时间 到时候就会 原子地清除对该对象的所有弱引用以及所有
  • Objective C 使用字符串动态调用方法

    我只是想知道是否有一种方法可以调用一个方法 我可以用字符串动态构建方法的名称 例如我有一个名为 loaddata 的方法 void loadData 我通常会这样称呼它 self loadData 但我希望能够使用字符串动态调用它 例如 N
  • AngularJS:为什么 ng-bind 在角度上比 {{}} 更好?

    我参加了一场有角度的演讲 其中提到了会议中的一位人士ng bind比 捆绑 原因之一 ng bind将变量放入监视列表中 只有当模型发生更改时 数据才会推送到视图 另一方面 每次都会对表达式进行插值 我猜是角度周期 并推送该值 无论该值是否
  • 枢轴标题样式

    C UWP Windows 10 项目 I need to set Pivot header style to something like this 我尝试使用这个例子堆栈溢出 https stackoverflow com questi
  • Bash 中的布尔运算符( &&、-a、||、-o )

    两者有什么区别 a and oUnix 运算符 这两种类型的使用有何限制 难道仅仅是因为 and 在条件中使用标志时应该使用运算符吗 As in 1 yes r 2 txt versus 1 yes a 2 lt 3 经验法则 Use a
  • 如何在页面刷新时保留 javascript/jquery 对 DOM 所做的更改

    我的问题是当我单击链接时 例如第二页 它将在屏幕上显示第二页 但是当我重新加载页面时 当前页面不会保存 并且会恢复为默认页面 如何防止所需页面刷新到默认页面 JavaScript
  • 使用 PM2 和 Vscode 进行调试

    Visual Studio Code 内置了一些很棒的调试功能 可以轻松使用 Node js 调试应用程序 但是 我的应用程序配置为使用 PM2 版本 3 4 1 节点版本 6 17 1 如何设置 Visual Studio Code 来使
  • 使用 UIKit 绘制复选标记 NSString 不考虑填充颜色

    我试图用 UIKit 绘制绿色的复选标记 但它是用黑色绘制的 这是代码 UIColor greenColor set drawAtPoint CGPointZero withFont UIFont systemFontOfSize UIFo
  • Django 测试框架中的login()

    我已经开始使用 Django 的测试框架 一切都工作正常 直到我开始测试经过身份验证的页面 为了简单起见 我们假设这是一个测试 class SimpleTest TestCase def setUp self user User objec
  • boost::进程间线程安全吗?

    目前 我有 2 个进程使用 message queue 和共享内存形式 boost 进行通信 一切都按参加的方式进行 现在我需要使这个进程之一成为多线程 再次感谢boost 我想知道是否需要在线程之间使用保护机制 例如互斥体 或者boost