问题标签 [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.

0 投票
2 回答
2090 浏览

c++ - Message passing between two programs

Currently I have two standalone C++ programs, a master and a slave. The master writes some data to shared memory, using boost::interprocess, and then launches the slave, which is able to read from the memory.

What I would like to do is to have the slave constantly running, and for the master to send a message to the slave when the memory has been written to and is ready to be read from.

The only way I can think to achieve the same thing is for the slave to constantly check the shared memory for the presence of an object, and when it is detected read from it and delete it. However, this doesn't seem optimal.

Is there a nicer way of achieving the same thing?


Background: This is a continuation of my previous question here...

0 投票
0 回答
374 浏览

c++ - Boost 进程间:如何创建映射与客户分配器?

所以我map<KeyType, MappedType, std::less<KeyType>, ShmemAllocator> MyMap;进程间教程中遇到了我想知道如何制作 std::string、std::string 映射?

0 投票
2 回答
2788 浏览

c++ - boost::interprocess 线程安全吗?

目前,我有 2 个进程使用 message_queue 和 shared_memory 表单 boost 进行通信。一切照常工作。

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

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

提前致谢。

0 投票
2 回答
290 浏览

c++ - 基于文件的查找表

您需要一个由 10^10 个 4 字节整数组成的数组用作查找表。将其加载到 RAM 需要 40GB,这是不可行的。初始化后,您永远不需要写入该数组。您需要从单个进程的多个线程同时从该数组的随机位置读取单个整数值。保证您在 64 位平台上。这个查找表的最快实现是什么?使用常规文件读取功能或例如 Boost 内存映射文件?

0 投票
0 回答
525 浏览

c++ - boost 1.49 进程间示例代码无法编译

我尝试编译这样的代码(linux ubuntu,boost 1.49):

它不再为我编译。错误列表在这里(对不起一些不重要的波兰语):

boost 1.49是bug版本吗?

0 投票
1 回答
370 浏览

c++ - 截断已被 boost::interprocess 锁定的现有 fstream

如果我在不关闭进程的情况下使用标志重新打开其中包含数据的数据并且我的进程持有一个会发生什么?fstreamstd::ios::truncboost::interprocess::file_lock()

我应该期望操作系统保持我的文件锁定吗?或者当文件关闭时操作系统会透明地取消注册锁?Windows 和 POSIX 经验将不胜感激。

编辑

我的主要目标是截断配置文件并重写它。该文件的第二个目的是防止其他等效的守护进程启动。因此,如果有另一种方法使用 boost 或 c++ stl 来截断文件而不关闭它,我会全神贯注:D

0 投票
1 回答
800 浏览

c++ - 提升共享内存类型

我尝试做以下事情:

使用 boost::interprocess 库在共享内存中创建一个“大”数组(1 000 000 + 对象)

我的代码包含以下内容:

我的问题是:如何确定这个 boost 函数的返回类型是什么?

如果我对以下内容执行相同的操作: SingleField 而不是 "::pair 它似乎不起作用,但我不需要第二个容器,我只需要一个但有一个它不起作用!

eclipse 的输出对我来说太神秘了。自从我使用 boost 工作以来,由于这些问题我已经停止了几次,有没有一种简单的方法可以确定函数会返回什么“类型”?(我来自 Java,所以我习惯于有一些“简单”定义,上面写着 Object x )如果我能弄清楚一个特定函数返回的类型,我会很高兴,我为自己编写的所有函数都是很简单,但是有了这个库,我似乎遇到了问题。

第二个问题:为什么这些示例总是带有“类型”对,它是库的前提条件吗?

-> 我尝试过使用 #include ,Eclipse 告诉我它的 std::pair 问题是为什么它是 T* ?这是起始段地址吗?

感谢您的时间和答案。

日食输出:

我已多次阅读 boost Library 手册,也许我查看了错误的站点或页面,如果您提供我错过的信息,我会很高兴。

http://www.boost.org/doc/libs/1_42_0/doc/html/interprocess/quick_guide.html#interprocess.quick_guide.qg_interprocess_container

0 投票
1 回答
4049 浏览

c++ - Boost::asio,共享内存和进程间通信

我有一个boost::asio专门用作输入数据源的应用程序,因为我们的大多数对象都是基于网络通信的。由于某些特定要求,我们现在还需要能够使用共享内存作为输入法。我已经编写了共享内存组件,并且它运行得比较好。

问题是如何处理从共享内存进程到消费应用程序的数据可供读取的通知——我们需要处理现有输入线程中的数据(使用boost::asio),我们也不需要阻塞那个输入线程等待数据。

我通过引入一个中间线程来实现这一点,该线程等待从共享内存提供程序进程发出信号的事件,然后将完成处理程序发布到输入线程以处理数据的读取。

这现在也起作用了,但是中间线程的引入意味着在很多情况下,我们在读取数据之前有一个额外的上下文切换,这对延迟有负面影响,而且额外线程的开销也是相对昂贵。

这是应用程序正在执行的操作的一个简单示例:

有什么方法可以input_thread直接处理数据(而不必post通过interrupt_thread?假设我们完全控制了消费和提供应用程序,我们有额外的对象需要由input_thread对象处理(所以我们不能简单地阻塞和等待那里的信号量对象)。目标是减少开销,通过共享内存提供应用程序传入的数据的 CPU 利用率和延迟。

0 投票
1 回答
390 浏览

c++ - Boost进程间:如何启动一个新进程?

我想知道是否可以跨平台方式使用 Boost.Interprocess 启动一个新进程?另外我想知道是否可以启动类似的进程echo

0 投票
0 回答
318 浏览

c++ - 非 Null-Terminated 字符串,同时使用 boost 进程间共享字符串数据,(v 1.41, 1.44) x86_64

我花了一些时间搜索 boost 进程间文档,但我仍然被这个奇怪的错误所困扰。我已经看到此代码适用于 boost 版本 1.42、x86,但不适用于标题中提到的版本。

这是一个共享字符串的简单客户端-服务器模型。服务器设置并等待。当客户端与服务器共享新字符串时,它会打印新共享的字符串。代码如下:

服务器:

客户:

这是服务器输出:

这是客户端输出:

如您所见,服务器获取的是字符串数据,但由于不正确的字符串终止,会在其输出中打印额外/重叠的字符(第 4 行和第 5 行)。客户端数据未损坏。我想知道是否还有其他重要的事情没有完成。希望对此有任何指示。它在 Boost 1.42 x86 版本上的工作方式也很奇怪,而服务器端没有任何损坏。非常感谢!

PS:当我使用托管共享内存功能时,我没有明确使用任何同步(互斥)机制。我一定要吗?