The Singleton Pattern: The Full Code
The complete Singleton Pattern project, browsable file by file, using the idiomatic thread-safe version in each language.
September 13, 20263 min read19 / 19
The last two posts built the singleton pattern piece by piece. This post is the reference: the whole project, as real files in real folders, using the idiomatic, thread-safe version of each language, a function-local static in C++ and the initialization-on-demand holder in Java.
main.cpp
#include <iostream>
#include <thread>
#include <vector>
#include "connectionpool/ConnectionPool.h"
int main() {
const int threadCount = 8;
std::vector<std::thread> threads;
std::vector<ConnectionPool*> results(threadCount);
for (int i = 0; i < threadCount; ++i) {
threads.emplace_back([&results, i]() {
results[i] = &ConnectionPool::getInstance();
});
}
for (auto& t : threads) t.join();
for (ConnectionPool* pool : results) {
std::cout << pool << "\n";
}
return 0;
}Run this yourself: This exact file layout lives in the code-practice repo. Clone it,
cd into whichever language folder, and build it the same way as the other labs in this series.Keep reading