#include <atomic>
#include <mutex>
#include <numeric>
#include <shared_mutex>
#include <thread>
#include "benchmark/benchmark.h"
int global_value = 42;
std::mutex m;
std::shared_mutex sm;
static void BM_shared_mutex(benchmark::State& state) {
for (auto _ : state) {
std::shared_lock<std::shared_mutex> lock(sm);
benchmark::DoNotOptimize(global_value);
}
}
static void BM_mutex(benchmark::State& state) {
for (auto _ : state) {
std::lock_guard<std::mutex> lock(m);
benchmark::DoNotOptimize(global_value);
}
}
BENCHMARK(BM_shared_mutex)->Threads(1)->Threads(2)->Threads(4)->Threads(8)->Threads(32);
BENCHMARK(BM_mutex)->Threads(1)->Threads(2)->Threads(4)->Threads(8)->Threads(32);
BENCHMARK_MAIN();