【问题标题】:Force boost to use POSIX shared memory instead of System V?强制提升使用 POSIX 共享内存而不是 System V?
【发布时间】:2013-01-17 16:31:32
【问题描述】:

Boost 默认使用 System V 共享内存并创建文件进行通信。我希望它使用 POSIX 共享内存。

他们是一种强制 boost 使用 POSIX 共享内存而不是尝试创建文件的方法吗?

我是否必须更改源代码中的某些内容(Boost.Interprocess)?

我在 OS X(10.6、10.7 和 10.8)上的项目中使用了 1.46.1 版本的 boost。但我也可以使用 1.52.0。在迁移之前,我想知道是否可以这样做。

【问题讨论】:

  • 这是哪个 boost 库?
  • 我更新了我的问题。我正在使用 1.46.1。
  • 我的意思是 boost 的哪一部分?我最好的猜测是 Boost.Interprocess
  • 哦,是的。 Boost.Interprocess.

标签: c++ macos boost posix shared-memory


【解决方案1】:

根据文档,Boost Interprocess 将在可用时使用 POSIX。进一步研究它,似乎在 Max OSX 上它没有,因为实现有一些不合格的行为(根据标题)。以下是来自boost/interprocess/detail/workaround.hpp 的代码。

//Check for XSI shared memory objects. They are available in nearly all UNIX platforms
   #if !defined(__QNXNTO__)
      #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS
   #endif

   #if defined(_POSIX_SHARED_MEMORY_OBJECTS) && ((_POSIX_SHARED_MEMORY_OBJECTS - 0) > 0)
      #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS
   #else
      //VMS and MACOS don't define it but they have shm_open/close interface
      #if defined(__vms)
         #if __CRTL_VER >= 70200000
            #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS
         #endif
         //Mac OS has some non-conformant features like names limited to SHM_NAME_MAX
      #elif defined (__APPLE__)
         //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS
         //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW
      #endif
   #endif

【讨论】:

  • 我尝试使用 posix 共享内存对象编写一些示例代码,它们运行良好。只是有了提升,事情变得更容易了。
  • @MacGeek:我确信它可以很好地工作,我很好奇为什么,但当前 (Boost 1.52) 标头默认情况下不会启用它。您也许可以定义BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS,但我不知道它的效果如何。
  • 我试过了。写入过程也可以创建SM对象并初始化它,另一方面读取过程可以创建SM对象但在ftruncate(m_handle,length)期间失败;
  • 我们必须取消注释 BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS 和 BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW 行,并确保阅读器进程正在尝试截断它。
猜你喜欢
  • 1970-01-01
  • 2015-09-30
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多