强制使用POSIX共享内存而不是System V?

时间:2013-01-17 16:31:33

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

默认情况下,Boost使用System V共享内存并创建用于通信的文件。我希望它使用POSIX共享内存。

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

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

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

1 个答案:

答案 0 :(得分: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