-//$$CDS-header$$
+/*
+ This file is a part of libcds - Concurrent Data Structures library
-#ifndef _CDS_URCU_DETAILS_SH_DECL_H
-#define _CDS_URCU_DETAILS_SH_DECL_H
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
+
+ Source code repo: http://github.com/khizmax/libcds/
+ Download: http://sourceforge.net/projects/libcds/files/
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSLIB_URCU_DETAILS_SH_DECL_H
+#define CDSLIB_URCU_DETAILS_SH_DECL_H
#include <cds/urcu/details/base.h>
// that is not so efficiently
# define CDS_SHURCU_DECLARE_THREAD_DATA(tag_) \
template <> struct thread_data<tag_> { \
- CDS_ATOMIC::atomic<uint32_t> m_nAccessControl ; \
- CDS_ATOMIC::atomic<bool> m_bNeedMemBar ; \
+ atomics::atomic<uint32_t> m_nAccessControl ; \
+ atomics::atomic<bool> m_bNeedMemBar ; \
thread_list_record< thread_data > m_list ; \
thread_data(): m_nAccessControl(0), m_bNeedMemBar(false) {} \
+ explicit thread_data( OS::ThreadId owner ): m_nAccessControl(0), m_bNeedMemBar(false), m_list(owner) {} \
~thread_data() {} \
}
/// Retire pointer \p by the disposer \p pFunc
template <typename T>
- static void retire( T * p, void (* pFunc)(T *) )
+ static void retire( T * p, void (* pFunc)(T *))
{
- retired_ptr rp( reinterpret_cast<void *>( p ), reinterpret_cast<free_retired_ptr_func>( pFunc ) );
+ retired_ptr rp( reinterpret_cast<void *>( p ), reinterpret_cast<free_retired_ptr_func>( pFunc ));
retire( rp );
}
typedef sh_singleton_instance< rcu_tag > rcu_instance;
protected:
- CDS_ATOMIC::atomic<uint32_t> m_nGlobalControl;
+ atomics::atomic<uint32_t> m_nGlobalControl;
thread_list< rcu_tag > m_ThreadList;
int const m_nSigNo;
static bool isUsed()
{
- return rcu_instance::s_pRCU != NULL;
+ return rcu_instance::s_pRCU != nullptr;
}
int signal_no() const
m_ThreadList.retire( pRec );
}
- uint32_t global_control_word( CDS_ATOMIC::memory_order mo ) const
+ uint32_t global_control_word( atomics::memory_order mo ) const
{
return m_nGlobalControl.load( mo );
}
void switch_next_epoch()
{
- m_nGlobalControl.fetch_xor( rcu_tag::c_nControlBit, CDS_ATOMIC::memory_order_seq_cst );
+ m_nGlobalControl.fetch_xor( rcu_tag::c_nControlBit, atomics::memory_order_seq_cst );
}
bool check_grace_period( thread_record * pRec ) const;
static rcu_singleton * instance() { assert( rcu_instance::s_pRCU ); return static_cast<rcu_singleton *>( rcu_instance::s_pRCU ); } \
static thread_record * attach_thread() { return instance()->attach_thread() ; } \
static void detach_thread( thread_record * pRec ) { return instance()->detach_thread( pRec ) ; } \
- static uint32_t global_control_word( CDS_ATOMIC::memory_order mo ) { return instance()->global_control_word( mo ) ; } \
+ static uint32_t global_control_word( atomics::memory_order mo ) { return instance()->global_control_word( mo ) ; } \
}
CDS_SIGRCU_DECLARE_SINGLETON( signal_buffered_tag );
//@endcond
#endif // #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-#endif // #ifndef _CDS_URCU_DETAILS_SH_DECL_H
+#endif // #ifndef CDSLIB_URCU_DETAILS_SH_DECL_H