问题标签 [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.
synchronization - 崩溃后仍获取名为 mutex 的 boost 进程间进程
我正在使用 a boost::interpocess::scoped_lock
using anamed_mutex
和 a timeout
; 我在 Linux 操作系统中运行。
在我的一次测试中,我遇到了崩溃:从那时起,每次我尝试再次运行应用程序时,它都会卡在我创建锁的位置;看起来互斥锁仍然以某种方式获得(没有可能使用它的进程正在运行)。
最重要的是,如果您查看下面的代码,我希望在 150 微秒后,定时scoped_lock
返回给我一个错误..但事实并非如此..它只是挂在那里。
我的问题如下:
- 如何确保
boost::interprocess
命名互斥锁被销毁?(那么如何查看跨进程的共享互斥锁以及如何销毁它们) - 为什么在 150 微秒后获取互斥锁不返回?下面的代码有什么问题吗?
非常感谢
AFG
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 部分,发现异常消息“找不到文件”
c++ - 在 OSX 上从 x86 读取共享内存到 x64,反之亦然
如果我从 64 位应用程序创建一个 SM 并在 32 位应用程序上打开它,它会失败。
由 64 位应用程序创建的文件位于以下路径:
32 位应用程序搜索的文件在哪里
因此 32 位应用程序无法读取该文件。
我在 Mac OS X 上使用 boost 1.47.0。这是一个错误吗?我是否必须使用某些宏进行一些设置才能修复它?有没有人遇到过这个问题?
c++ - 通过 boost scoped_lock 消耗过多的 CPU
我有一些代码等待共享内存上的写操作。如果没有人写,它会继续等待。
当我进行采样时,我发现它消耗了大约 90% 的 CPU。
有人可以帮我解决这个性能问题吗?请看附图。
c++ - 如何安全删除 boost::shared_memory_object
我正在为 IPC 使用 boost::shared_memory_object。我有一个客户端和服务器。我使用两个消息队列。一种用于向服务器发送请求,另一种用于从服务器接收回复。它是一个异步协议。我的问题是我不知道如何在失败的情况下安全地删除 shared_memory_objects。考虑这种情况:
- 服务器启动
- 客户端启动并连接到服务器;消息队列是在共享内存中创建的。
- 客户端定期向服务器发送心跳;一切都好。
- 客户因处理过多而受阻;错过了一些心跳
- 服务器认为客户端已死,清理队列(shared_memory_object::remove 将删除队列,即使有一个正在运行的进程打开了该共享内存段的句柄)
- 客户端完成处理;尝试写入已删除的消息队列:
所有的地狱都在这里崩溃了。有时写入成功,有时会崩溃。谁知道消息队列被删除后,其他进程是否在同一内存地址上创建了新的共享内存对象……
显然,如果客户端认为服务器已关闭并删除队列,则尝试读取/写入队列的服务器线程可能会崩溃(或损坏内存)。
c++ - Boost.MPI/Boost.Interprocess - 如何检测进程是否在同一台机器上运行?
所以我使用 boost.mpi 在集群中的 2 台机器上运行我的应用程序,每台机器有 8 个核心。所以我启动了 16 个进程。我想知道我的进程如何找出运行在我的哪些集群上?他们如何以某种方式为机器命名并保存它们?
c++ - 使用 int 和 string 提升进程间映射
我有以下代码使用 boost interprocess 将地图保存到共享内存中
此代码无法编译..它会引发以下错误
区别如果
所以我猜
不是正确的方法..所以我应该如何插入地图,如果错误存在..否则错误是什么?
c++ - 在共享内存的提升映射中插入提升向量
这就是我到目前为止所拥有的。但这甚至没有编译。我应该怎么做才能让它工作?
我现在如何继续将此向量插入到地图中?这是我尝试过的事情之一
但似乎不起作用。我知道在共享内存中创建指向向量的指针不是正确的方法。如果我要将它插入到地图中,我需要为此创建一个对象。但是如何做到这一点或至少如何将这些东西合并到共享内存中?
g++ 抛出的错误是:
第 54 行是 main 中的最后一行(返回)
第 46 行是 mymap-> insert 行。
c++ - 提升进程间向量,创建多个向量指针
我想使用以下代码将共享向量插入共享地图:
代码有效..但我想做的是构造一个没有名字的向量。那就是做这样的事情
因此,如果我将它放在一个循环中,并且每个循环都以不同的方式命名它们是没有问题的。有没有办法这样做?或者至少有一种自动方法可以在每个循环中以不同的方式命名它们?
c++ - 设置boost创建的共享内存的权限
我们打开一个由另一个进程创建的 boost 共享内存,像这样
但是如果创建共享内存的进程是root用户,那么读取它的进程,如果是普通用户,将会失败,原因如下:
我应该怎么做才能避免这种情况?那就是将共享内存的权限授予所有人?