2012-04-17 86 views

回答

1

boost::details::pool::null_mutex是一个什么也不做的互斥锁(锁总是立即成功)。当你不使用线程时是合适的。升压池库中选取它会用什么样的互斥与基于下面的代码片段的互斥体类型的typedef访问临界区从boost\pool\detail\mutex.hpp同步:

#if !defined(BOOST_HAS_THREADS) || defined(BOOST_NO_MT) || defined(BOOST_POOL_NO_MT) 
    typedef null_mutex default_mutex; 
#else 
    typedef boost::mutex default_mutex; 
#endif 

换句话说,如果配置说没有涉及线程(无论是作为一个整体的Boost,还是特定的池库),那么将使用null_mutex(这基本上是一个nop)。

如果要支持线程,则会使用boost::mutex类型,它来自Boost线程库(如果您的系统使用pthread,则将是基于pthread的互斥锁)。

+0

所以提升:详细:: poolLpthread_mutex被转移到boost:thread :: mutex? – Shay 2012-04-17 10:43:53

+0

我不知道它是如何设置的 - 只是现在这个互斥量默认是一个boost :: mutex的typedef,如果boost配置为线程。也许在boost :: pool有自己的自定义线程支持之前,他们决定在某些时候利用boost :: thread库(我只是猜测 - 我目前只安装了1.49)。 – 2012-04-17 11:07:57