问题标签 [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 投票
4 回答
3449 浏览

synchronization - 崩溃后仍获取名为 mutex 的 boost 进程间进程

我正在使用 a boost::interpocess::scoped_lockusing anamed_mutex和 a timeout; 我在 Linux 操作系统中运行。

在我的一次测试中,我遇到了崩溃:从那时起,每次我尝试再次运行应用程序时,它都会卡在我创建锁的位置;看起来互斥锁仍然以某种方式获得(没有可能使用它的进程正在运行)。

最重要的是,如果您查看下面的代码,我希望在 150 微秒后,定时scoped_lock返回给我一个错误..但事实并非如此..它只是挂在那里。

我的问题如下:

  1. 如何确保boost::interprocess命名互斥锁被销毁?(那么如何查看跨进程的共享互斥锁以及如何销毁它们)
  2. 为什么在 150 微秒后获取互斥锁不返回?下面的代码有什么问题吗?

非常感谢

AFG

0 投票
0 回答
243 浏览

boost - 如何与 out-proc *.exe COM 服务器的 beetwen 部分进行通信?

我们有 *.exe 应用程序,它也是进程外 COM 服务器。

主线程正在执行一些网络例程:它接收数据包并将它们放入队列。

COM 客户端,例如 VBA,使用 COM 服务器,也想使用队列。尽管它们在同一个地址空间中,但问题是:

我们如何为 COM 客户端提供一个机会,让他们可以与 exe 进程同时使用队列。

有一个使用共享内存的想法,但没有成功

升级版:

我尝试使用 boost::interprocess。由于相同的地址空间,我只想共享对象指针。

exe部分:

COM部分:

COM客户端(VBA)告诉

对象“IMyCOMServer”的方法“ADD”失败

UPD2:

我刚刚用 try{}catch{} 包围了 Com 部分,发现异常消息“找不到文件”

0 投票
2 回答
997 浏览

c++ - 在 OSX 上从 x86 读取共享内存到 x64,反之亦然

如果我从 64 位应用程序创建一个 SM 并在 32 位应用程序上打开它,它会失败。

由 64 位应用程序创建的文件位于以下路径:

32 位应用程序搜索的文件在哪里

因此 32 位应用程序无法读取该文件。

我在 Mac OS X 上使用 boost 1.47.0。这是一个错误吗?我是否必须使用某些宏进行一些设置才能修复它?有没有人遇到过这个问题?

0 投票
1 回答
820 浏览

c++ - 通过 boost scoped_lock 消耗过多的 CPU

我有一些代码等待共享内存上的写操作。如果没有人写,它会继续等待。

当我进行采样时,我发现它消耗了大约 90% 的 CPU。

有人可以帮我解决这个性能问题吗?请看附图。

截屏

0 投票
0 回答
844 浏览

c++ - 如何安全删除 boost::shared_memory_object

我正在为 IPC 使用 boost::shared_memory_object。我有一个客户端和服务器。我使用两个消息队列。一种用于向服务器发送请求,另一种用于从服务器接收回复。它是一个异步协议。我的问题是我不知道如何在失败的情况下安全地删除 shared_memory_objects。考虑这种情况:

  1. 服务器启动
  2. 客户端启动并连接到服务器;消息队列是在共享内存中创建的。
  3. 客户端定期向服务器发送心跳;一切都好。
  4. 客户因处理过多而受阻;错过了一些心跳
  5. 服务器认为客户端已死,清理队列(shared_memory_object::remove 将删除队列,即使有一个正在运行的进程打开了该共享内存段的句柄)
  6. 客户端完成处理;尝试写入已删除的消息队列:

所有的地狱都在这里崩溃了。有时写入成功,有时会崩溃。谁知道消息队列被删除后,其他进程是否在同一内存地址上创建了新的共享内存对象……

显然,如果客户端认为服务器已关闭并删除队列,则尝试读取/写入队列的服务器线程可能会崩溃(或损坏内存)。

0 投票
1 回答
259 浏览

c++ - Boost.MPI/Boost.Interprocess - 如何检测进程是否在同一台机器上运行?

所以我使用 boost.mpi 在集群中的 2 台机器上运行我的应用程序,每台机器有 8 个核心。所以我启动了 16 个进程。我想知道我的进程如何找出运行在我的哪些集群上?他们如何以某种方式为机器命名并保存它们?

0 投票
2 回答
2844 浏览

c++ - 使用 int 和 string 提升进程间映射

我有以下代码使用 boost interprocess 将地图保存到共享内存中

此代码无法编译..它会引发以下错误

区别如果

所以我猜

不是正确的方法..所以我应该如何插入地图,如果错误存在..否则错误是什么?

0 投票
1 回答
1411 浏览

c++ - 在共享内存的提升映射中插入提升向量

这就是我到目前为止所拥有的。但这甚至没有编译。我应该怎么做才能让它工作?

我现在如何继续将此向量插入到地图中?这是我尝试过的事情之一

但似乎不起作用。我知道在共享内存中创建指向向量的指针不是正确的方法。如果我要将它插入到地图中,我需要为此创建一个对象。但是如何做到这一点或至少如何将这些东西合并到共享内存中?

g++ 抛出的错误是:

第 54 行是 main 中的最后一行(返回)

第 46 行是 mymap-> insert 行。

0 投票
2 回答
478 浏览

c++ - 提升进程间向量,创建多个向量指针

我想使用以下代码将共享向量插入共享地图:

代码有效..但我想做的是构造一个没有名字的向量。那就是做这样的事情

因此,如果我将它放在一个循环中,并且每个循环都以不同的方式命名它们是没有问题的。有没有办法这样做?或者至少有一种自动方法可以在每个循环中以不同的方式命名它们?

0 投票
2 回答
8072 浏览

c++ - 设置boost创建的共享内存的权限

我们打开一个由另一个进程创建的 boost 共享内存,像这样

但是如果创建共享内存的进程是root用户,那么读取它的进程,如果是普通用户,将会失败,原因如下:

我应该怎么做才能避免这种情况?那就是将共享内存的权限授予所有人?