|Message: "extern" variable in multithread||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
Hi G4 experts,
I declare a extern variable, which is a cern-ROOT file, as my data recorder. The recorder is then be built in some different types of ROOT objects, like trees, histograms...etc, in BeginOfRunAction. Then in the UserSteppingAction, I check for every step if the particle is killed. If it's, I invoke the recorder to record the coordinate. And finally, I save and delete the data recorder in EndOfRunAction.
This works fine for single thread but obviously problematic for multithreading. I have tried to do #ifndef #define for the extern variable definition part to make sure it's singly initialized. Then I did mutex to lock the building ROOT object part in BeginOfRunAction, but I had gotten many sets of the objects that I wanted to build being built multiple times. This is bad somewhat acceptable because I can combine them later anyway. But then the problem was that the data filling-in part in UserSteppingAction crushed. Events seemed not to stick to a specific set of data-recording objects. So they tried to fill in the objects while another thread thought it's done and was trying to save and delete the object.
Please suggest a properer way to code for my case. I am pretty sure the way I write is internally not suitable for multithreading...Thank you all in advance