149e08aacStbbdev /* 2b15aabb3Stbbdev Copyright (c) 2005-2021 Intel Corporation 349e08aacStbbdev 449e08aacStbbdev Licensed under the Apache License, Version 2.0 (the "License"); 549e08aacStbbdev you may not use this file except in compliance with the License. 649e08aacStbbdev You may obtain a copy of the License at 749e08aacStbbdev 849e08aacStbbdev http://www.apache.org/licenses/LICENSE-2.0 949e08aacStbbdev 1049e08aacStbbdev Unless required by applicable law or agreed to in writing, software 1149e08aacStbbdev distributed under the License is distributed on an "AS IS" BASIS, 1249e08aacStbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349e08aacStbbdev See the License for the specific language governing permissions and 1449e08aacStbbdev limitations under the License. 1549e08aacStbbdev */ 1649e08aacStbbdev 1749e08aacStbbdev #ifndef __TBB_null_mutex_H 1849e08aacStbbdev #define __TBB_null_mutex_H 1949e08aacStbbdev 2049e08aacStbbdev #include "detail/_config.h" 2149e08aacStbbdev #include "detail/_namespace_injection.h" 22*478de5b1Stbbdev #include "detail/_mutex_common.h" 2349e08aacStbbdev 2449e08aacStbbdev namespace tbb { 2549e08aacStbbdev namespace detail { 2649e08aacStbbdev namespace d1 { 2749e08aacStbbdev 2849e08aacStbbdev //! A mutex which does nothing 2949e08aacStbbdev /** A null_mutex does no operation and simulates success. 3049e08aacStbbdev @ingroup synchronization */ 3149e08aacStbbdev class null_mutex { 3249e08aacStbbdev public: 3349e08aacStbbdev //! Constructors 3449e08aacStbbdev constexpr null_mutex() noexcept = default; 3549e08aacStbbdev 3649e08aacStbbdev //! Destructor 3749e08aacStbbdev ~null_mutex() = default; 3849e08aacStbbdev 3949e08aacStbbdev //! No Copy 4049e08aacStbbdev null_mutex(const null_mutex&) = delete; 4149e08aacStbbdev null_mutex& operator=(const null_mutex&) = delete; 4249e08aacStbbdev 4349e08aacStbbdev //! Represents acquisition of a mutex. 4449e08aacStbbdev class scoped_lock { 4549e08aacStbbdev public: 4649e08aacStbbdev //! Constructors 4749e08aacStbbdev constexpr scoped_lock() noexcept = default; scoped_lock(null_mutex &)4849e08aacStbbdev scoped_lock(null_mutex&) {} 4949e08aacStbbdev 5049e08aacStbbdev //! Destructor 5149e08aacStbbdev ~scoped_lock() = default; 5249e08aacStbbdev 5349e08aacStbbdev //! No Copy 5449e08aacStbbdev scoped_lock(const scoped_lock&) = delete; 5549e08aacStbbdev scoped_lock& operator=(const scoped_lock&) = delete; 5649e08aacStbbdev acquire(null_mutex &)5749e08aacStbbdev void acquire(null_mutex&) {} try_acquire(null_mutex &)5849e08aacStbbdev bool try_acquire(null_mutex&) { return true; } release()5949e08aacStbbdev void release() {} 6049e08aacStbbdev }; 6149e08aacStbbdev 6249e08aacStbbdev //! Mutex traits 6349e08aacStbbdev static constexpr bool is_rw_mutex = false; 6449e08aacStbbdev static constexpr bool is_recursive_mutex = true; 6549e08aacStbbdev static constexpr bool is_fair_mutex = true; 6649e08aacStbbdev lock()6749e08aacStbbdev void lock() {} try_lock()6849e08aacStbbdev bool try_lock() { return true; } unlock()6949e08aacStbbdev void unlock() {} 7049e08aacStbbdev }; // class null_mutex 7149e08aacStbbdev 7249e08aacStbbdev } // namespace d1 7349e08aacStbbdev } // namespace detail 7449e08aacStbbdev 7549e08aacStbbdev inline namespace v1 { 7649e08aacStbbdev using detail::d1::null_mutex; 7749e08aacStbbdev } // namespace v1 7849e08aacStbbdev } // namespace tbb 7949e08aacStbbdev 8049e08aacStbbdev #endif /* __TBB_null_mutex_H */ 81