Boost managed_windows_shared_memory find() crash

Boost managed_windows_shared_memory find() crash

本文关键字:find crash shared managed windows Boost memory      更新时间:2023-10-16

我正试图为第三方应用程序开发一个dll插件,该应用程序读取另一个exe生成的数据。我用boost::managed_windows_shared_memory

exe创建共享内存并向其写入一个正常工作的对象。然而,当我试图在dll代码中找到该对象时,我的第三方应用程序崩溃了。我搜索了很多,发现了这篇文章。最后一个答案提到使用find()会创建死锁。

我尝试使用boost::interprocess_mutex,但它也不起作用。关于如何解决这个问题,有什么指导方针吗?谢谢!

在exe中:

boost::interprocess::interprocess_mutex myMutex;
myMutex.lock();
i = managed_shm.find_or_construct<int>("MyInteger")(992); 
myMutex.unlock();

dll中:

boost::interprocess::interprocess_mutex myMutex;
myMutex.lock();
std::pair<int*, std::size_t> p = managed_shm.find<int>("MyInteger"); 
myMutex.unlock();

在共享内存中放置时,打算使用进程间(匿名)。如果您想用它来管理共享内存区域的创建,或者同步共享内存外部对它的访问,请使用一个名为互斥锁:

的互斥锁。
  • http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess/synchronization_mechanisms.html interprocess.synchronization_mechanisms.mutexes.mutexes_named_example