I am writing some code for a multi-thread application, and I am having problems (i.e. crashes) each time I manipulate TClonesArrays.
The objects in the arrays are TParticle. I do not use TThread, but pthreads directly.
I managed to reproduce the problem in a simple program where I start a number of threads, each one creating on the heap its own TClonesArray, then filling it with TParticles, then Clear-ing it.
Is there any known limitation to the usage of TClonesArrays (or TParticles) with more than one thread? I attach my example code.
Thanks for your help,
Andrea.
PS: root 5.34/03, configured with --with-thread-libdir=/usr/lib64/ --all
PPS: I did see this thread
but it is not clear (to me) if that recipe is only needed for writing to file testcode.cc (1.3 KB)
I am writing some code for a multi-thread application, and I am having problems (i.e. crashes) each time I manipulate TClonesArrays.
[/quote]
I think, TClonesArray is not guaranteed to be thread-safe - it obviously works with some shared (global) data, since it needs information about the contained object’s type (this can be fixed, though),
so even if you have per-thread TClonesArray, your code is still not thread-safe. On my machine/with my compilers/OS/etc. your code is not even able to create any array.
The simplest possible workaround for your small code-snippet is just to create/destroy all per-thread arrays BEFORE/AFTER parallel part, in a main thread. For me it works, though output in stdout is mixed - but this is something else ) (see code attached). testcode.cc (1.2 KB)