Is Meyers' Singleton Thread-Safe?
Dec 29, 2024 am 11:40 AMMeyers' Singleton: Thread Safety Evaluation and Enhancement
The Meyers' implementation of the Singleton pattern utilizes lazy initialization, but its thread safety remains a concern. This article delves into the intricacies of thread safety in the given code:
static Singleton& instance() { static Singleton s; return s; }
In C 11 and Beyond
In C 11, lazy initialization of global objects is thread safe by virtue of the standard's guarantee: concurrent initialization will cause waiting until its completion. Both GCC and Visual Studio support this feature.
Therefore, in a C 11 or later environment, Meyers' Singleton implementation is thread safe.
In C 03 and Prior
In C 03 and earlier, the provided code is not thread safe. As described by Meyers in his article, double-checked locking patterns can be susceptible to race conditions on certain architectures. To achieve thread safety in this context, a full lock around the instantiation method is recommended.
Code for C 03 Thread Safety
Here is a modification of the code for C 03 thread safety:
static Singleton*& instance() { static Singleton* s = nullptr; static std::mutex s_mutex; std::lock_guard<std::mutex> guard(s_mutex); if (!s) s = new Singleton; return s; }
This implementation employs a mutex to synchronize access during initialization, ensuring thread safety.
The above is the detailed content of Is Meyers' Singleton Thread-Safe?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

What are the types of values returned by c language functions? What determines the return value?

What are the definitions and calling rules of c language functions and what are the

C language function format letter case conversion steps

Where is the return value of the c language function stored in memory?

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C Standard Template Library (STL) work?
