boost::interprocess::shared_ptr 线程安全(和进程间安全)吗?

2023-11-21

我想在线程之间共享数据,并在最后一个用户使用完数据后自动删除数据。大多数时候,这似乎有效,使用boost::interprocess::shared_ptr in a boost::fixed_managed_shared_memory段:但并非总是如此。

So, is boost::interprocess::shared_ptr线程(和进程间)安全吗?

如果我在固定地址使用共享内存(我非常确定这在我的 64 位(好吧,48 位)地址空间中没问题),是否可以使用普通的内存boost::shared_ptr(哪些是线程安全的)?

一些澄清:

我使用的指针类型是普通的void*,(我的共享内存被映射到固定地址)。

线程安全的问题与引用计数有关——即是否允许同时在不同进程中复制/销毁指向同一事物的共享指针。Not在不同线程中访问同一共享指针,以及not访问受指点者。


使用的引用计数boost::interprocess:shared_ptr是使用定义在中的原子计数器实现的boost/interprocess/detail/atomic.hpp引用计数逻辑主要由boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp。目的是以线程(和进程间)安全的方式处理引用计数。

原子操作的实现因特定的目标平台而异(Windows 使用 Win32 Interlocked API,某些平台使用各种内联汇编等)。了解您的目标平台可能会有所帮助。我想您可能会在引用计数处理中遇到错误,尽管我不会指望它。

我将上述答案限制在您想要特别解决的领域:

线程安全的问题与引用计数有关——即是否允许同时在不同进程中复制/销毁指向同一事物的共享指针。不同线程中不能访问同一个共享指针,也不能访问被指针。

也就是说,我会看看您上面提到的项目或以某种方式创建“独立”可能引入的错误boost::interprocess:shared_ptr对象(其中不同shared_ptrs 使用不同的引用计数引用同一个对象)。如果您有一些代码继续使用和/或传递原始对象指针,则很容易发生这种情况。

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

boost::interprocess::shared_ptr 线程安全(和进程间安全)吗? 的相关文章

随机推荐

  • 在 Polly 库中使用 httpclient 的指数退避

    我刚刚读到波莉图书馆从桌面代理到服务器进行通信时 我需要处理 3 次重试 目前我喜欢指数退避 但是 我很难理解如何在我的代码中实现这一点 这是我到目前为止所做的 using HttpClient client new HttpClient
  • AutoFixture:模拟方法不返回冻结实例

    我正在尝试编写这个简单的测试 var fixture new Fixture Customize new AutoMoqCustomization var postProcessingAction fixture Freeze
  • C#:Dictionary 如何在没有 Add(KeyValuePair) 的情况下实现 ICollection> ?

    看着System Collections Generic Dictionary
  • CocoaPods 找不到 pod“GTMSessionFetcher/Core”的兼容版本

    我正在制作一个 React Native 移动应用程序 并希望合并 Firebase 和 Firebase 身份验证 但是 当我运行 pod install 或 pod update 时 我遇到此错误 我做了一些研究 发现这个问题还没有被谷
  • Cocos2d-x android无法解析cocos2dx库

    我从 macOS xcode 4 5 开始 我尝试过教程 使用cocos2dx完成macOSX的构建 问题发生在android源中 没有描述cocos2dxActivity的内容 所以 org cocos2dx lib不是其他文件 安卓没有
  • 扩展高度以包含绝对定位的儿童

    我正在为 CMS 构建 html javascript 主题设计器 元素是绝对定位的 可以通过鼠标移动 调整大小 和 或包含可编辑文本 其高度可以由行数确定 然而 我遇到了一个问题 即父元素的高度不会扩展以包含其绝对定位的子元素 最少的代码
  • 更改摩卡的默认超时

    如果我们有一个单元测试文件 my spec js 并使用 mocha 运行 mocha my spec js 默认超时为 2000 毫秒 可以使用命令行参数覆盖它以进行部分测试 mocha my spec js timeout 5000 是
  • 如何使用 Azure Blob 存储 SDK 将 Blob 从一个容器复制到另一个容器

    我一直在参考文档https learn microsoft com en us azure storage blobs storage quickstart blobs python 我无法找到将文件从一个容器复制 移动到另一个容器的正确
  • Swift 进度指示器图像蒙版

    首先 该项目是使用 Swift 构建的 我想创建一个自定义进度指示器 在脚本运行时 填满 该脚本将调用从远程服务器拉取的 JSON 提要 为了更好地形象化我所追求的 我做了这个 我的猜测是有两个 PNG 图像 一白一红 然后根据进度量简单地
  • 计算值用 R 改变符号的次数

    我对 R 还很陌生 但我对它很感兴趣 因为我发现它很容易使用 尽管我不是程序员 我试图解决以下问题 我需要计算列中值更改符号的次数 然后按路径对结果进行排序 下面是表格的示例 路径是一个因素 一旦我最终得到数据 我就可以计算出如何对数据进行
  • 在 Spring 应用程序的事务中使用 Async

    我有一个 Spring 应用程序 它使用以下命令更新 MySQL DB 中的特定实体详细信息 Transactional方法 并且在同一方法中 我尝试使用调用另一个端点 Async这是另一个 Spring 应用程序 它从 MySql DB
  • 如何使用ArrayList的get()方法

    我是 java 新手 也是 OOP 新手 我正在尝试了解 ArrayList 类 但我不明白如何使用 get 我尝试在网上搜索 但找不到任何有用的东西 这是官方文档ArrayList get 无论如何 这很简单 例如 ArrayList l
  • 加载图像时显示加载图标

    我想在 a 中显示背景图像 加载微调器div这将在其中加载图像 图像将在完全加载后显示 执行如下操作 div style background image none div 演示 jQuery 中 我如何使用 Angular2 Ionic2
  • 如何在 VBA 应用程序中隐藏代码

    Is it possible to hide VBA code normally accessible from Excel s VBA Editor Alt F11 from a user s prying eyes Can I for
  • 将数字四舍五入到前 3 位数字(以数字 != 0 开头)

    是否有一个预定义的格式函数可以将数字四舍五入到前 3 位数字 开头应该是数字 0 0 02528498 to 0 0253 1 857403 to 1 86 2060943 to 2060000 0 00006513832 to 0 000
  • 未加密的 SSL 协议?

    是否可以通过未加密的 https 发送消息 例如 要求进行证书验证和授权 但不加密通过套接字发送的实际数据 是的 TLS 和 SSL 支持 无加密 模式 所讨论的特定客户端和服务器是否配置为启用是一个单独的问题 服务器有可能默认启用这些密码
  • 将函数应用于 Spark DataFrame 的每一行

    我使用的是 Spark 1 3 我想对数据框的每一行应用一个函数 该函数对行的每一列进行哈希处理并返回哈希值列表 dataframe map row gt row toSeq map col gt col hashCode 当我运行此代码时
  • Visual Studio:重新启用“构建失败,运行上次成功?”对话框

    当构建失败时 VS 会弹出一个选项来运行上次成功的构建 有人在我的机器上单击了 是 和 不再显示此对话框 现在我仍坚持该设置 我怎样才能重置它 流程如下Visual Studio 2010及以上 但与以前的版本应该类似 在菜单栏上转到 To
  • 使用 Update 且 Upsert 为 true 时未设置默认值

    我为用户提供以下模型 var UserSchema new mongoose Schema name String dob Date sex String photo String email type String index uniqu
  • boost::interprocess::shared_ptr 线程安全(和进程间安全)吗?

    我想在线程之间共享数据 并在最后一个用户使用完数据后自动删除数据 大多数时候 这似乎有效 使用boost interprocess shared ptr in a boost fixed managed shared memory段 但并非