From f45a43325db5d399fa487680132a891fa87b6d9e Mon Sep 17 00:00:00 2001 From: Russell Taylor <taylorrj@ornl.gov> Date: Mon, 26 Nov 2012 14:14:33 -0500 Subject: [PATCH] Re #5729. Add critical section around filling of static variable. Need for this highlighted by performance test failure (GetDetOffsetsMultiPeaksTestPerformance). --- .../Framework/DataObjects/src/PeakColumn.cpp | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/Code/Mantid/Framework/DataObjects/src/PeakColumn.cpp b/Code/Mantid/Framework/DataObjects/src/PeakColumn.cpp index e6307e51ddc..04c241b1164 100644 --- a/Code/Mantid/Framework/DataObjects/src/PeakColumn.cpp +++ b/Code/Mantid/Framework/DataObjects/src/PeakColumn.cpp @@ -25,24 +25,30 @@ namespace DataObjects static std::map<std::string, std::string> index; if(index.empty()) { - // Assume double if not in this map - index.insert(std::make_pair("DetID", "int")); - index.insert(std::make_pair("RunNumber", "int")); - index.insert(std::make_pair("h", "double")); - index.insert(std::make_pair("k", "double")); - index.insert(std::make_pair("l", "double")); - index.insert(std::make_pair("Wavelength", "double")); - index.insert(std::make_pair("Energy", "double")); - index.insert(std::make_pair("TOF", "double")); - index.insert(std::make_pair("DSpacing", "double")); - index.insert(std::make_pair("Intens", "double")); - index.insert(std::make_pair("SigInt", "double")); - index.insert(std::make_pair("BinCount", "double")); - index.insert(std::make_pair("BankName", "str")); - index.insert(std::make_pair("Row", "double")); - index.insert(std::make_pair("Col", "double")); - index.insert(std::make_pair("QLab", "V3D")); - index.insert(std::make_pair("QSample", "V3D")); + PARALLEL_CRITICAL(fill_column_index_map) + { + if (index.empty()) // check again inside the critical block + { + // Assume double if not in this map + index.insert(std::make_pair("DetID", "int")); + index.insert(std::make_pair("RunNumber", "int")); + index.insert(std::make_pair("h", "double")); + index.insert(std::make_pair("k", "double")); + index.insert(std::make_pair("l", "double")); + index.insert(std::make_pair("Wavelength", "double")); + index.insert(std::make_pair("Energy", "double")); + index.insert(std::make_pair("TOF", "double")); + index.insert(std::make_pair("DSpacing", "double")); + index.insert(std::make_pair("Intens", "double")); + index.insert(std::make_pair("SigInt", "double")); + index.insert(std::make_pair("BinCount", "double")); + index.insert(std::make_pair("BankName", "str")); + index.insert(std::make_pair("Row", "double")); + index.insert(std::make_pair("Col", "double")); + index.insert(std::make_pair("QLab", "V3D")); + index.insert(std::make_pair("QSample", "V3D")); + } + } } auto iter = index.find(name); if(iter != index.end()) -- GitLab