Modification error of sensitive volume detector in multi-threaded mode

During the run, I tried to modify the sensitive volume detector, using G4RunManager::GetRunManager()->ReinitializeGeometry(); G4RunManager::GetRunManager()->DefineWorldVolume(DefineVolumes());
to redefine all structures. There is no problem in single-threaded mode.

Of course, I delete all G4Box G4LogicalVolume and G4PVPlacement pointer. I
define SensitiveDetector in ConstructSDandField() and use FindSensitiveDetector() to prevent duplicate definitions. My sensitive volume detector is defined by G4PVReplica(). Their mother volume is defined by G4PVParameterised();

G4SDManager *SDManager = G4SDManager::GetSDMpointer();
auto DetectorSD = SDManager->FindSensitiveDetector(“DetectorSDobj”, true);
if (!DetectorSD){
DetectorSDobj = new B1CalorimeterSD(“DetectorSDobj”, “DetectorSDCollection”, nOfLayers, NbOfChambers);
SDManager->AddNewDetector(DetectorSDobj);
}

But in multi-threaded mode, there are still occasional errors. I can’t get hit accounting data for this cell. The hit pointer points to a strange place.
Finally, because the sensitivedetector has not been changed, I have to use SetTranslation() and GeometryHasBeenModified() to avoid the problem.

My system is ubuntu16.04 and Geant4 version is 10.6.p03.

Thank you for your help