C++ 为什么boost';s进程间互斥在posix上不健壮?

C++ 为什么boost';s进程间互斥在posix上不健壮?,c++,boost,boost-mutex,C++,Boost,Boost Mutex,我是boost的新手,只是想了解它的一小部分——进程间互斥 另外,在使用文件锁的跨平台实现中有一个健壮的互斥模拟: 这是为了模拟posix标准中可用的健壮互斥,但通用方法仅在平台特定版本不可用时使用 #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) #include <boost/interproce

我是boost的新手,只是想了解它的一小部分——进程间互斥

另外,在使用文件锁的跨平台实现中有一个健壮的互斥模拟:

这是为了模拟posix标准中可用的健壮互斥,但通用方法仅在平台特定版本不可用时使用

#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_POSIX_PROCESS_SHARED)
   #include <boost/interprocess/sync/posix/mutex.hpp>
   #define BOOST_INTERPROCESS_USE_POSIX
//Experimental...
#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
   #include <boost/interprocess/sync/windows/mutex.hpp>
   #define BOOST_INTERPROCESS_USE_WINDOWS
#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
   #include <boost/interprocess/sync/spin/mutex.hpp>
   #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION
#如果!已定义(BOOST_进程间_FORCE_通用_仿真)和已定义(BOOST_进程间_POSIX_进程共享)
#包括
#定义BOOST\u进程间\u使用\u POSIX
//实验。。。
#艾利夫!已定义(BOOST\u进程间\u强制\u通用\u仿真)和已定义(BOOST\u进程间\u窗口)
#包括
#定义BOOST\u进程间\u使用\u窗口
#艾利夫!已定义(已调用BOOST\u进程间\u DOXYGEN\u)
#包括
#定义BOOST\u进程间\u使用\u通用\u仿真
但在实际支持健壮互斥体的posix系统上(我想这取决于内核版本),健壮互斥体实际上没有启用

所以我真的不理解这里的逻辑,posix健壮互斥实现是否有严重的性能损失,以至于我们不想使用它?即便如此,至少应该有一个选项可以选择启用此功能


为了解决这个问题,因为我不需要boost,有没有办法让通用实现在posix实现上可用,这样我就可以利用健壮性?

我刚刚研究了boost/interprocess/sync/posix/pthread\u helpers.hpp文件中用于交叉互斥的包装类的boost实现。 我看到PTHREAD_MUTEX_ROBUST丢失了。 请添加如下所示的健壮属性,然后重试

mutexattr_wrapper(bool recursive = false)
 {
         if(pthread_mutexattr_init(&m_attr)!=0 ||
            pthread_mutexattr_setpshared(&m_attr, PTHREAD_PROCESS_SHARED)!= 0 ||
             (recursive &&
              pthread_mutexattr_settype(&m_attr, PTHREAD_MUTEX_RECURSIVE)!= 0 ) ||
              pthread_mutexattr_setrobust(&m_attr, PTHREAD_MUTEX_ROBUST)!= 0)
            throw interprocess_exception("pthread_mutexattr_xxxx failed");
}