22 void recursive_mutex::scoped_lock::internal_acquire( recursive_mutex& m ) {
    31         EnterCriticalSection( &m.impl );
    34         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: mutex already destroyed");
    37         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: illegal mutex state");
    41     int error_code = pthread_mutex_lock(&m.impl);
    48 void recursive_mutex::scoped_lock::internal_release() {
    49     __TBB_ASSERT( my_mutex, 
"recursive_mutex::scoped_lock: not holding a mutex" );
    51     switch( my_mutex->state ) {
    53         LeaveCriticalSection( &my_mutex->impl );
    56         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: mutex already destroyed");
    59         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: illegal mutex state");
    63      int error_code = pthread_mutex_unlock(&my_mutex->impl);
    64      __TBB_ASSERT_EX(!error_code, 
"recursive_mutex::scoped_lock: pthread_mutex_unlock failed");
    69 bool recursive_mutex::scoped_lock::internal_try_acquire( recursive_mutex& m ) {
    75         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: mutex already destroyed");
    78         __TBB_ASSERT(
false,
"recursive_mutex::scoped_lock: illegal mutex state");
    84     result = TryEnterCriticalSection(&m.impl)!=0;
    86     result = pthread_mutex_trylock(&m.impl)==0;
    93 void recursive_mutex::internal_construct() {
    95     InitializeCriticalSectionEx(&impl, 4000, 0);
    98     pthread_mutexattr_t mtx_attr;
    99     int error_code = pthread_mutexattr_init( &mtx_attr );
   103     pthread_mutexattr_settype( &mtx_attr, PTHREAD_MUTEX_RECURSIVE );
   104     error_code = pthread_mutex_init( &impl, &mtx_attr );
   107     pthread_mutexattr_destroy( &mtx_attr );
   112 void recursive_mutex::internal_destroy() {
   116         DeleteCriticalSection(&impl);
   119         __TBB_ASSERT(
false,
"recursive_mutex: already destroyed");
   122         __TBB_ASSERT(
false,
"recursive_mutex: illegal state for destruction");
   127     int error_code = pthread_mutex_destroy(&impl);
   128     __TBB_ASSERT_EX(!error_code,
"recursive_mutex: pthread_mutex_destroy failed");
 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.
 
#define _T(string_literal)
Standard Windows style macro to markup the string literals.
 
#define __TBB_ASSERT_EX(predicate, comment)
"Extended" version is useful to suppress warnings if a variable is only used with an assert
 
#define ITT_SYNC_CREATE(obj, type, name)
 
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.