const UInt_t poolSize = 4U; TH1::AddDirectory(false); ROOT::TThreadExecutor pool(poolSize); auto fillRandomHisto = [](int seed = 0) { TRandom3 rndm(seed); auto h = new TH1F("myHist", "Filled in parallel", 128, -8, 8); for (auto i : ROOT::TSeqI(1000000)) { h->Fill(rndm.Gaus(0, 1)); } return h; }; auto seeds = ROOT::TSeqI(23); ROOT::ExecutorUtils::ReduceObjects redfunc; auto sumRandomHisto = pool.MapReduce(fillRandomHisto, seeds, redfunc); auto c = new TCanvas(); sumRandomHisto->Draw(); return 0; gROOT->GetListOfCanvases()->Draw()