问题标签 [boost-interprocess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 VS 2010 上使用 boost::interprocess 构建代码问题
我正在尝试在 VS 2010 中构建一段代码,该代码通常在网上找到,作为在共享内存中拥有地图的示例。
我得到了这个让我大吃一惊的错误。有任何想法吗?
c++ - 使用 Boost 的进程间读写器锁
在解释如何使用 Boost 实现读取器/写入器锁时,这个线程是黄金。它看起来相对简单,我真的很喜欢它,但它似乎也使用了一个未命名的锁,我需要一个进程间解决方案(不需要是可移植的,可以是 Windows-only)。
有没有办法有一个进程间shared_mutex
?我看到有一个named_mutex
,但我无法让它与shared_lock
其他锁一起使用。
任何指针表示赞赏。
[编辑]
与此同时,我遇到了这个几乎击中钉子的线程。我有两个问题:
- 它没有显示完整的代码(我猜我需要使用
named_upgradable_mutex
,但我不太确定)和 - 我不喜欢修改后的“writer”的答案,它不使用在析构函数中解锁的现成类,而是对互斥锁进行 3 次原始调用的序列。
仍然欢迎评论或好的解决方案。
c++ - 共享内存中的 STL 容器 (Windows)
我正在开发一个由 2 个必须共享一些数据结构的进程组成的应用程序。这些类被组织在不同的库中,并且这些库用于不同的应用程序。
- 我的第一次尝试是在 Win32 中使用命名共享内存,但这里的问题是我不能使用 STL 容器。
- 在寻找解决方案时,我找到了Boost Interprocess,如果我理解的话,我必须将我的类中的所有 STL 容器更改为“STL”Boost Interprocess 容器。
那么,有没有其他方法可以使用 STL(在 Windows 中)共享类或结构?目标是不要在我们的库中对 Boost 产生过多的依赖。
谢谢
c++ - 关于 Boost 共享内存的问题
我正在尝试提出一种简单但可移植的方式来使用共享内存。Boost::interprocess
似乎是一个不错的起点,但我遇到了一些问题/担忧。
- 我可以以某种方式查询 shm 段的存在吗,最好使用 boost API?我总是可以尝试使用
create_only
并捕获异常来创建它,但这是一个糟糕的设计,我不希望堆栈在“好”路径中展开。 - 即使附加了其他进程,我也可以截断该段吗?(当然,前提是我会处理同步)我想所有其他进程都必须重新映射,它们是否也必须重新连接?
- Boost doc说,在Windows上,便携式
shared_memory_object
实际上并不是共享内存本身,而是一个内存映射文件。我理解正确吗?这意味着我必须在 Windows 上使用专门的代码,这是我试图避免的。让我质疑 Boost 是否适合我的目的,还有其他选择吗?与其与 boost 作斗争,我还不如自己编写特定于平台的代码——在您看来,这值得付出努力吗?
c++ - 在持有 boost::interprocess 共享内存锁时处理核心转储
我正在开发几个多线程进程试图获取通过 boost::interprocess (named_mutex 上的 scoped_lock) 管理的共享内存文件的锁的应用程序。
看起来,如果其中一个进程在持有共享内存文件的锁的同时转储了一个核心,那么所有其他进程最终都会等待这个锁被释放。
关于如何克服这个问题的任何想法?我想确保当持有锁的进程死亡时,它应该确保锁被释放。
我看到的一个问题是我没有调用 named_mutex 对象的析构函数。这可能是这个问题的原因吗?进程核心转储时是否保证调用析构函数?
谢谢!
c++ - 尝试使用 boost::interprocess::managed_shared_memory::construct 编译应用程序时出错
尝试使用类construct<T>()
的方法时收到一个奇怪的编译错误boost::interprocess::managed_shared_memory
。我在 1.48 版本中使用 Boost 库,在 4.6.3 版本中使用 GCC。
问题是当我创建一个managed_shared_memory object
(它不是结构的成员)然后我尝试使用它的construct<T>()
方法构造任何对象时,编译成功:
虽然,当managed_shared_memory
对象在结构中定义然后创建时,construct<T>()
方法用法的编译失败:
出现以下 GCC 错误,指向construct
使用方法的行:
不幸的是,我没有针对其他版本的 Boost 和 GCC 测试它,所以我不知道它是 Boost/GCC 的错误还是功能。
有没有人遇到过类似的错误或知道可能是什么原因?
c++ - 是否可以将多态类存储在共享内存中?
假设我有课Base
和Derived : public Base
. 我使用 boost::interprocess 库构建了一个共享内存段。是否有可能有类似这样的代码:
我在这里看到的问题是,例如 Base 派生类所需的空间是未知的(那么要分配多少 shmem?)
问:如何在应用程序之间通过指针传递对象?
c++ - 创建字符串的共享内存向量
我正在尝试创建一个管理(std)字符串的共享内存向量的类。
客户端成功将一个字符串添加到向量中(它也成功地从缓冲区中读取该字符串进行调试),管理器(上面的代码)接收到信号(条件变量),写入向量中有一个字符串(第 27 行),但是当它试图通过at()
应用程序获取该字符串时会崩溃。
编辑:我已经想通了,使用
std::string
是不可能的,string
boost ipc 中有一个容器专门用于这种情况。这并没有改变我需要一个 (boost/std) 字符串向量的事实......
问:如何跨共享内存传递字符串?我需要将它们存储在 shmem 中的某个缓冲区(一次能够存储 >1 个)中,然后在第二个进程中获取 - 这就是要求。输入总是std::string
如此,输出也是,但 shmem 中的内部表示可能不同。
c++ - boost::interprocess::managed_shared_memory 在不同版本的 boost 之间的兼容性
是否有任何明确的兼容性保证 boost::interprocess::managed_shared_memory 可以跨不同的 boost 版本工作?我打算用它在多个进程之间共享一个整数或十个整数(这实际上将充当它们都读取和写入的一段数据的修订号)。这些流程是单独发布的,并且偶尔会终止。
问题是:我是否因为 1.51 中的 managed_shared_memory 无法与 1.44 中的 managed_shared_memory 对话而将自己锁定在一个给定版本的 boost 中?
c++ - 使用 boost::interprocess::file_lock 创建一个锁定文件
我想boost::interprocess::file_lock
用来确保按进程写入目录的文件x
在完成之前P1
不会被进程读取P2
。为此,我想在写入文件时P1
锁定文件boost::interprocess::file_lock
,然后在完成后解锁它们。然后P2
可以跳过(并返回)任何被锁定的文件。
我遇到的问题是它似乎boost::interprocess::file_lock
只允许您锁定存在的文件。但是,如果我先创建文件,然后将其锁定,则会出现竞争条件:
P1
创建文件P2
注意到文件并开始读取它P1
锁定文件P1
写入一些数据P2
读取一些数据,到达最后,最后只得到P1
' 的一部分输出。
所以我想做的是创建一个文件并在创建后立即将其锁定。有没有办法做到这一点boost::interprocess::file_lock
?