2012-04-17 40 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

相關問題