Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
spin_mutex.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2005-2020 Intel Corporation
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 
17 #include "tbb/tbb_machine.h"
18 #include "tbb/spin_mutex.h"
19 #include "itt_notify.h"
20 #include "tbb_misc.h"
21 
22 namespace tbb {
23 
25  __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
26  ITT_NOTIFY(sync_prepare, &m);
28  my_mutex = &m;
29  ITT_NOTIFY(sync_acquired, &m);
30 }
31 
33  __TBB_ASSERT( my_mutex, "release on spin_mutex::scoped_lock that is not holding a lock" );
34 
35  ITT_NOTIFY(sync_releasing, my_mutex);
36  __TBB_UnlockByte(my_mutex->flag);
37  my_mutex = NULL;
38 }
39 
41  __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
42  bool result = bool( __TBB_TryLockByte(m.flag) );
43  if( result ) {
44  my_mutex = &m;
45  ITT_NOTIFY(sync_acquired, &m);
46  }
47  return result;
48 }
49 
51  ITT_SYNC_CREATE(this, _T("tbb::spin_mutex"), _T(""));
52 }
53 
54 } // namespace tbb
tbb::spin_mutex::scoped_lock::internal_try_acquire
bool __TBB_EXPORTED_METHOD internal_try_acquire(spin_mutex &m)
Like try_acquire, but with ITT instrumentation.
Definition: spin_mutex.cpp:40
spin_mutex.h
__TBB_ASSERT
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
ITT_NOTIFY
#define ITT_NOTIFY(name, obj)
Definition: itt_notify.h:112
__TBB_LockByte
__TBB_Flag __TBB_LockByte(__TBB_atomic_flag &flag)
Definition: tbb_machine.h:919
tbb
The graph class.
Definition: serial/tbb/parallel_for.h:46
tbb::spin_mutex::flag
__TBB_atomic_flag flag
0 if lock is released, 1 if lock is acquired.
Definition: spin_mutex.h:41
itt_notify.h
tbb::spin_mutex::scoped_lock::my_mutex
spin_mutex * my_mutex
Points to currently held mutex, or NULL if no lock is held.
Definition: spin_mutex.h:56
tbb::spin_mutex::scoped_lock::internal_acquire
void __TBB_EXPORTED_METHOD internal_acquire(spin_mutex &m)
Like acquire, but with ITT instrumentation.
Definition: spin_mutex.cpp:24
__TBB_TryLockByte
bool __TBB_TryLockByte(__TBB_atomic_flag &flag)
Definition: tbb_machine.h:913
ITT_SYNC_CREATE
#define ITT_SYNC_CREATE(obj, type, name)
Definition: itt_notify.h:115
tbb::spin_mutex::internal_construct
void __TBB_EXPORTED_METHOD internal_construct()
Internal constructor with ITT instrumentation.
Definition: spin_mutex.cpp:50
__TBB_UnlockByte
#define __TBB_UnlockByte
Definition: gcc_generic.h:211
_T
#define _T(string_literal)
Standard Windows style macro to markup the string literals.
Definition: itt_notify.h:59
tbb_misc.h
tbb_machine.h
sync_releasing
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p sync_releasing
Definition: ittnotify_static.h:104
tbb::spin_mutex
A lock that occupies a single byte.
Definition: spin_mutex.h:39
tbb::spin_mutex::scoped_lock::internal_release
void __TBB_EXPORTED_METHOD internal_release()
Like release, but with ITT instrumentation.
Definition: spin_mutex.cpp:32

Copyright © 2005-2020 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.