Problem
Singleton is a most widely used design pattern. If a class has and only has one instance at every moment, we call this design as singleton. For example, for class Mouse (not a animal mouse), we should design it in singleton.
You job is to implement a
getInstance
method for given class, return the same instance of this class every time you call this method.Example
In Java:
A a = A.getInstance(); A b = A.getInstance(); a should equal to b.
Challenge
If we call getInstance concurrently, can you make sure your code could run correctly?
Solution
#include <mutex>
class Solution {
public:
/**
* @return: The same instance of this class every time
*/
static Solution* getInstance() {
static Solution *instance = NULL;
if (instance == NULL) {
mtx.lock(); // lock is used to keep to create only one instance when concurrently getInstance()
if (instance == NULL) {
instance = new Solution();
}
mtx.unlock();
}
return instance;
}
private:
static std::mutex mtx;
};
std::mutex Solution::mtx;