in benchmarks/rw_lock_benchmark.cpp [66:88]
void BM_parallel(benchmark::State& state) {
int concurrency = state.range(0);
int writePeriod = state.range(1);
std::vector<int64_t> values(kNumValues);
std::atomic<int64_t> total(0);
MutexT mtx;
int start = 0;
dispenso::TaskSet tasks(dispenso::globalThreadPool());
for (auto UNUSED_VAR : state) {
for (int c = 0; c < concurrency; ++c) {
tasks.schedule([&total, start, &mtx, &values, writePeriod]() {
total.fetch_add(iterate(mtx, values, start, writePeriod), std::memory_order_acq_rel);
});
if (++start == writePeriod) {
start = 0;
}
}
tasks.wait();
}
benchmark::DoNotOptimize(total.load(std::memory_order_acquire));
}