Message: "extern" variable in multithread Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None "extern" variable in multithread 

Forum: Multithreading
Date: 15 Apr, 2017
From: Yen-Yung Chang <Yen-Yung Chang>

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

Yen-Yung

 Add Message Add Message
to: ""extern" variable in multithread"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews