19 #if !defined(__TBB_show_deprecation_message_recursive_mutex_H) && defined(__TBB_show_deprecated_header_message)
20 #define __TBB_show_deprecation_message_recursive_mutex_H
21 #pragma message("TBB Warning: tbb/recursive_mutex.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.")
24 #if defined(__TBB_show_deprecated_header_message)
25 #undef __TBB_show_deprecated_header_message
28 #ifndef __TBB_recursive_mutex_H
29 #define __TBB_recursive_mutex_H
31 #define __TBB_recursive_mutex_H_include_area
54 #if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS
58 InitializeCriticalSectionEx(&
impl, 4000, 0);
60 pthread_mutexattr_t mtx_attr;
61 int error_code = pthread_mutexattr_init( &mtx_attr );
65 pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
66 error_code = pthread_mutex_init( &
impl, &mtx_attr );
70 pthread_mutexattr_destroy( &mtx_attr );
80 DeleteCriticalSection(&
impl);
82 pthread_mutex_destroy(&
impl);
116 internal_acquire( mutex );
126 return internal_try_acquire( mutex );
128 bool result = mutex.try_lock();
158 friend class recursive_mutex;
171 aligned_space<scoped_lock> tmp;
175 EnterCriticalSection(&
impl);
177 int error_code = pthread_mutex_lock(&
impl);
188 aligned_space<scoped_lock> tmp;
189 return (
new(tmp.begin())
scoped_lock)->internal_try_acquire(*
this);
192 return TryEnterCriticalSection(&
impl)!=0;
194 return pthread_mutex_trylock(&
impl)==0;
202 aligned_space<scoped_lock> tmp;
205 s.internal_release();
208 LeaveCriticalSection(&
impl);
210 pthread_mutex_unlock(&
impl);
225 CRITICAL_SECTION
impl;
231 pthread_mutex_t
impl;
246 #undef __TBB_recursive_mutex_H_include_area
void const char const char int ITT_FORMAT __itt_group_sync s
static const bool is_recursive_mutex
native_handle_type native_handle()
void release()
Release lock.
#define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)
static const bool is_rw_mutex
class __TBB_DEPRECATED_IN_VERBOSE_MODE_MSG("tbb::aligned_space is deprecated, use std::aligned_storage") aligned_space
Block of space aligned sufficiently to construct an array T with N elements.
scoped_lock()
Construct lock that has not acquired a recursive_mutex.
void __TBB_EXPORTED_METHOD internal_construct()
All checks from mutex constructor using mutex.state were moved here.
void __TBB_EXPORTED_METHOD internal_destroy()
All checks from mutex destructor using mutex.state were moved here.
~scoped_lock()
Release lock (if lock is held).
static const bool is_fair_mutex
#define __TBB_EXPORTED_METHOD
pthread_mutex_t * native_handle_type
Return native_handle.
recursive_mutex * my_mutex
The pointer to the current recursive_mutex to work.
bool try_lock()
Try acquiring lock (non-blocking)
void acquire(recursive_mutex &mutex)
Acquire lock on given mutex.
scoped_lock(recursive_mutex &mutex)
Acquire lock on given mutex.
void __TBB_EXPORTED_FUNC handle_perror(int error_code, const char *aux_info)
Throws std::runtime_error with what() returning error_code description prefixed with aux_info...
void unlock()
Release lock.
bool try_acquire(recursive_mutex &mutex)
Try acquire lock on given recursive_mutex.