- 主题:boost的named_mutex这么弱鸡吗?
喷之前看一下boost的实现呀
boost内部也是CreateMutex。。。
https://www.boost.org/doc/libs/1_75_0/boost/interprocess/detail/win32_api.hpp
只要进程退了,不管是正常还是异常退的,对mutex的引用都会释放掉。
所以,应该是有人还持有mutex的引用计数。
--
FROM 125.35.123.*
调了一下,默认用文件来实现的,所以直接杀进程可能有残留问题。
有个宏BOOST_INTERPROCESS_WINDOWS,可以让boost用windows api来实现。我刚看的就是这个分支。
https://www.boost.org/doc/libs/1_75_0/boost/interprocess/sync/named_mutex.hpp
#if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES)
#include <boost/interprocess/sync/posix/named_mutex.hpp>
#define BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES
#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS)
#include <boost/interprocess/sync/windows/named_mutex.hpp>
#define BOOST_INTERPROCESS_USE_WINDOWS
#else
#include <boost/interprocess/sync/shm/named_mutex.hpp>
#endif
【 在 rogerr 的大作中提到: 】
: 自己试一下就知道了,最简单的
: bip::named_mutex mutex(bip::open_or_create, name_);
: bip::scoped_lock<bip::named_mutex> lock(mutex);
: ...................
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
默认是没定义BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION的,所以只需要定义BOOST_INTERPROCESS_WINDOWS
有两种搞法,命令行或者改配置文件"boost/config/user.hpp"
命令行:
.\b2 define=BOOST_INTERPROCESS_WINDOWS
https://www.boost.org/doc/libs/1_75_0/libs/log/doc/html/log/installation/config.html
【 在 rogerr 的大作中提到: 】
: 这个宏确实有用,可我不知道怎样才能使用windows mutex,因为要使用windows mutex
: 还需要未定义BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION,
: #elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST
: ...................
--
FROM 125.35.123.*
估计是boost的码农搞乱了。可以提个issue试试。
很多内部宏没有文档。BOOST_DISABLE_WIN32应该不是这个作用。
【 在 rogerr 的大作中提到: 】
: BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION 不是默认定义在workaround.hpp中# if defined(_WIN32)下吗?
: 我看了user.hpp,里头有个宏BOOST_DISABLE_WIN32,我是不是可以通过定义这个宏来取消上述那个宏的定义?
:
--
FROM 125.35.123.*