I was wondering if there was a standard way to turn off locks in the
quick allocator for smart_ptr without disabling threading for all of
Boost?
It appears that the scoped_locks in the quick allocator are controlled
by BOOST_HAS_THREADS. In turn, BOOST_HAS_THREADS seems to be
controllable via BOOST_DISABLE_THREADS. However, I do not want to use
this option as I need to link multiple programs against the same boost
non-header libraries. Some programs have threading others do not. I
want to be able to selectively disable locking for the non-threaded
programs.
If there is not better way to do this, the patch below adds a
BOOST_QA_DISABLE_THREADS that will eliminate the scoped locks.
---
.../boost/smart_ptr/detail/quick_allocator.hpp | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/ext/boost_1_43_0/boost/smart_ptr/detail/quick_allocator.hpp
b/ext/boost_1_43_0/boost/smart_ptr/detail/quick_allocator.hpp
index 159bd5e..ed878cb 100644
--- a/ext/boost_1_43_0/boost/smart_ptr/detail/quick_allocator.hpp
+++ b/ext/boost_1_43_0/boost/smart_ptr/detail/quick_allocator.hpp
@@ -70,7 +70,7 @@ template struct allocator_impl
#endif
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
static lightweight_mutex & mutex()
{
@@ -89,7 +89,7 @@ template struct allocator_impl
static inline void * alloc()
{
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
lightweight_mutex::scoped_lock lock( mutex() );
#endif
if(block * x = free)
@@ -119,7 +119,7 @@ template struct
allocator_impl
}
else
{
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
lightweight_mutex::scoped_lock lock( mutex() );
#endif
if(block * x = free)
@@ -144,7 +144,7 @@ template struct
allocator_impl
{
if(pv != 0) // 18.4.1.1/13
{
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
lightweight_mutex::scoped_lock lock( mutex() );
#endif
block * pb = static_cast(pv);
@@ -161,7 +161,7 @@ template struct
allocator_impl
}
else if(pv != 0) // 18.4.1.1/13
{
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
lightweight_mutex::scoped_lock lock( mutex() );
#endif
block * pb = static_cast(pv);
@@ -171,7 +171,7 @@ template struct
allocator_impl
}
};
-#ifdef BOOST_HAS_THREADS
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_QA_DISABLE_THREADS)
template
lightweight_mutex * allocator_impl::mutex_init =
&allocator_impl::mutex();
--
1.7.0.1
Manish