Logo ROOT  
Reference Guide
No Matches
mt103_fillNtupleFromMultipleThreads.C File Reference

Detailed Description

View in nbviewer Open in SWAN Fill the same TNtuple from different threads.

This tutorial illustrates the basics of how it's possible with ROOT to write simultaneously to a single output file using TBufferMerger.

void mt103_fillNtupleFromMultipleThreads()
// Avoid unnecessary output
// Make ROOT thread-safe
// Total number of events
const size_t nEntries = 65535;
// Match number of threads to what the hardware can do
const size_t nWorkers = 4;
// Split work in equal parts
const size_t nEventsPerWorker = nEntries / nWorkers;
// Create the TBufferMerger: this class orchestrates the parallel writing
auto fileName = "mt103_fillNtupleFromMultipleThreads.root";
// Define what each worker will do
// We obtain from a merger a TBufferMergerFile, which is nothing more than
// a file which is held in memory and that flushes to the TBufferMerger its
// content.
auto work_function = [&](int seed) {
auto f = merger.GetFile();
TNtuple ntrand("ntrand", "Random Numbers", "r");
TRandom rnd(seed);
for (auto i : ROOT::TSeqI(nEntries))
// Create worker threads
std::vector<std::thread> workers;
for (auto i : ROOT::TSeqI(nWorkers))
workers.emplace_back(work_function, i + 1); // seed==0 means random seed :)
// Make sure workers are done
for (auto &&worker : workers)
#define f(i)
Definition RSha256.hxx:104
#define gROOT
Definition TROOT.h:406
TBufferMerger is a class to facilitate writing data in parallel from multiple threads,...
A simple TTree restricted to a list of float variables only.
Definition TNtuple.h:28
This is the base class for the ROOT Random number generators.
Definition TRandom.h:27
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void EnableThreadSafety()
Enables the global mutex to make ROOT thread safe/aware.
Definition TROOT.cxx:494
May 2017
Guilherme Amadio

Definition in file mt103_fillNtupleFromMultipleThreads.C.