summaryrefslogtreecommitdiff
path: root/datamanager.cpp
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2019-07-21 01:59:37 -0700
committerJohn Fultz <jfultz@wolfram.com>2019-07-21 02:02:55 -0700
commit5a746a6b1066a3b59dd75f221ed08a42876f3e00 (patch)
tree9b26702ba3d2e654c7cf1419047f97acbc241d43 /datamanager.cpp
parentf2e42335d294128591fb123baddf7182ca390d40 (diff)
Make the PRNG thread-safe.
Turns out that the C++ PRNGs aren't thread-safe. So lock calls to m_mersenneTwisterRng. Makes Thread Sanitizer happy.
Diffstat (limited to 'datamanager.cpp')
-rw-r--r--datamanager.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/datamanager.cpp b/datamanager.cpp
index 2dea169..55d1166 100644
--- a/datamanager.cpp
+++ b/datamanager.cpp
@@ -178,15 +178,18 @@ string DataManager::makeDataFilename(const string &subDirectory, const string &f
void DataManager::seedRandomNumbers(unsigned int seed)
{
+ lock_guard<mutex> lock(m_RngMutex);
m_mersenneTwisterRng.seed(seed);
}
void DataManager::seedRandomNumbers(seed_seq& seed)
{
+ lock_guard<mutex> lock(m_RngMutex);
m_mersenneTwisterRng.seed(seed);
}
int DataManager::randomInteger(int low, int high)
{
+ lock_guard<mutex> lock(m_RngMutex);
return uniform_int_distribution<>(low, high)(m_mersenneTwisterRng);
}