Hello!
I am having a hard time trying to run ROOT in a multithreaded environment.
I can use all the ROOT non-graphical classes (such as TTree) with a certain degree of success,
but ROOT breaks horribly as soon as I try to use the graphical functions such as TCanvas.
Please notice that in my scripts I never print to screen (or intend to print to screen). I just would like to save plots to png file.
Until now all my efforts have been vain. I am not giving any further info because the problem occurs on every single machine and every single ROOT version that I tried, but do notice that I am not using the ROOT TThread class but just the Python threading library.
Should I use the ROOT TThread class for better support of multithreaded graphical functions?
If you think there is a way and it is possible, please give me a hint and I will try to write a code sample to show you.
Correct me if I am wrong, but my understanding is that ROOT needs to allocate some global objects and variables to make the Cling interpreter possible.
I understand that Cling is a nice and useful feature and all … but I would give it up 100 times, if this would result in better multithreading support. That’s just my two cents …
Now it is Cling not CINT. But it is still the same . ROOT has globals like gPad which I think prevent to have multithreading. May be somebody knowing more about multithreading can give more details.
Yes, new RCanavas class will be thread safe - with some limitations.
Idea that each instance of RCanvas can be used safely in separate thread.
But it will be not possible to use same RCanvas from different threads without extra locking.
But RCanvas class is still in development phase - we do have only very basic drawing of several classes.
I am very very pleased to learn that this issue is being addressed. Thank you very much for letting me know. Keep up the good work. I am looking forward to use the new RCanvas.