#include #include #include #include #include #include #include namespace { struct Counter { std::mutex mtx; std::size_t impl = 0; }; void do_something(Counter& counter) { std::lock_guard lck{counter.mtx}; ++counter.impl; std::cout << "Doing something #" << counter.impl << '\n'; } } int main() { try { Counter counter; std::array workers; for (auto& worker : workers) { worker = std::thread{&do_something, std::ref(counter)}; } for (auto& worker : workers) { worker.join(); } } catch (const std::exception& e) { std::cerr << e.what() << '\n'; return 1; } return 0; }