Home > Article > Backend Development > How to Implement a Lock-Free Singleton in C 11 Without Mutexes?
Implementing Multithread-Safe Singleton in C 11 Without Mutexes
In C 11, multithreading introduces new concerns for implementing singleton classes. While the use of mutexes can guarantee thread safety, it may affect performance. This article explores an alternative approach to creating a lock-free singleton without resorting to mutexes.
Problem Statement:
How can we implement a lazy initialized singleton in C 11 without using mutexes for performance reasons?
Proposed Solution:
atomic_compare_exchange_strong:
To achieve lock-free initialization, we can leverage the std::atomic_compare_exchange_strong function. This atomic operation compares the expected value of an std::atomic variable (flag) with its desired value (desr) and, if they match, updates the variable to desr.
Initialization Process:
Within the initialize function, we perform the following steps:
Thread Safety:
The concurrent execution of threads is handled by the following measures:
Example Implementation:
<code class="cpp">class Singleton { public: static Singleton& get() { static Singleton instance; return instance; } static bool initialize(const string& name); };</code>
Conclusion:
By harnessing the atomic_compare_exchange_strong function, we can implement a multithread-safe singleton in C 11 without relying on mutexes. This approach ensures that only one thread will successfully initialize the singleton at any given time.
The above is the detailed content of How to Implement a Lock-Free Singleton in C 11 Without Mutexes?. For more information, please follow other related articles on the PHP Chinese website!