Double-checked locking
Software design pattern / From Wikipedia, the free encyclopedia
Dear Wikiwand AI, let's keep it short by simply answering these key questions:
Can you list the top facts and stats about Double-checked locking?
Summarize this article for a 10 year old
In software engineering, double-checked locking (also known as "double-checked locking optimization"[1]) is a software design pattern used to reduce the overhead of acquiring a lock by testing the locking criterion (the "lock hint") before acquiring the lock. Locking occurs only if the locking criterion check indicates that locking is required.
The original form of the pattern, appearing in Pattern Languages of Program Design 3,[2] has data races, depending on the memory model in use, and it is hard to get right. Some consider it to be an anti-pattern.[3] There are valid forms of the pattern, including the use of the volatile
keyword in Java and explicit memory barriers in C++.[4]
The pattern is typically used to reduce locking overhead when implementing "lazy initialization" in a multi-threaded environment, especially as part of the Singleton pattern. Lazy initialization avoids initializing a value until the first time it is accessed.