shared_mutx
unknown
c_cpp
a year ago
1.1 kB
3
Indexable
#include <atomic> #include <chrono> #include <exception> #include <iostream> #include <mutex> #include <type_traits> #include <shared_mutex> #include <vector> #include <thread> #include <stop_token> #include <boost/thread/pthread/shared_mutex.hpp> std::atomic_uint64_t counter = 0; boost::shared_mutex mutex{}; void Write() { std::unique_lock lock{mutex}; std::cout << counter << std::endl; } void Read() { std::shared_lock lock{mutex}; counter++; } int main(int argc, char *argv[]) { std::stop_source source{}; std::vector<std::jthread> v{}; for (int i = 0; i < 1000; ++i) { v.emplace_back([](std::stop_token token) -> void { while(!token.stop_requested()) { Read(); } }, source.get_token()); } //std::this_thread::sleep_for(std::chrono::seconds{1}); std::thread writer{[source] { Write(); std::cout << "STOP==="; source.request_stop(); }}; writer.join(); return 0; }
Editor is loading...
Leave a Comment