13 void mt103_fillNtupleFromMultipleThreads()
19 ROOT::EnableThreadSafety();
22 const size_t nEntries = 65535;
25 const size_t nWorkers = 4;
28 const size_t nEventsPerWorker = nEntries / nWorkers;
31 auto fileName =
"mt103_fillNtupleFromMultipleThreads.root";
32 ROOT::Experimental::TBufferMerger merger(fileName);
38 auto work_function = [&](
int seed) {
39 auto f = merger.GetFile();
40 TNtuple ntrand(
"ntrand",
"Random Numbers",
"r");
46 ntrand.ResetBit(kMustCleanup);
49 for (
auto i : ROOT::TSeqI(nEntries))
50 ntrand.Fill(rnd.Gaus());
55 std::vector<std::thread> workers;
57 for (
auto i : ROOT::TSeqI(nWorkers))
58 workers.emplace_back(work_function, i + 1);
61 for (
auto &&worker : workers)