shared_mutx

 avatar
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