• Conditionally thread safe: you can use conditionally safe objects concurrently by multiple threads as long as the threads do not share the same object (i.e. every thread uses a local instance of its objects). In addition, you can share the same conditionally safe object among threads as long as all threads use only const methods of the shared object. You can freely use instances of different conditionally safe types concurrently in different threads.
In multi-threaded applications, you should call ROOT::EnableThreadSafety(). Otherwise you need to consider ROOT objects as being thread unsafe.
With ROOT::EnableThreadSafety(), types whose names starts with R (e.g. RDataFrame ) generally are conditionally thread safe. Most of the core, math and I/O related classes are conditionally thread safe ( TTree , TDirectory , TFile , TH*, TMinuit ). Most of the general infrastructure classes (e.g. TROOT , TClass ) are thread safe. For more detail see the individual class documentation.