xref: /oneTBB/include/oneapi/tbb/null_mutex.h (revision 478de5b1)
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