Class shared_mutex
On some platforms shared_mutex is more effecient then shared_timed_mutex.
In C++17 was added shared_mutex.
Example of usage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
class MyCounter { public: int get() { std::shared_lock lock_(mutex_); return counter_; } void increment() { std::unique_lock lock_(mutex_); counter_++; } void reset() { std::unique_lock lock_(mutex_); counter_ = 0; } private: std::shared_mutex mutex_; int counter_{ 0 }; }; int main() { MyCounter counter; std::mutex cout_mutex; auto lambda = [&counter, &cout_mutex]() { std::lock_guard lock_(cout_mutex); for (auto i = 0; i < 3; i++) { counter.increment(); std::cout << counter.get() << std::endl; } }; std::thread thread1(lambda); std::thread thread2(lambda); thread1.join(); thread2.join(); return 0; } |