shared_mutx
unknown
c_cpp
2 years ago
1.1 kB
6
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