From 5a746a6b1066a3b59dd75f221ed08a42876f3e00 Mon Sep 17 00:00:00 2001 From: John Fultz Date: Sun, 21 Jul 2019 01:59:37 -0700 Subject: 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. --- datamanager.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'datamanager.cpp') 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 lock(m_RngMutex); m_mersenneTwisterRng.seed(seed); } void DataManager::seedRandomNumbers(seed_seq& seed) { + lock_guard lock(m_RngMutex); m_mersenneTwisterRng.seed(seed); } int DataManager::randomInteger(int low, int high) { + lock_guard lock(m_RngMutex); return uniform_int_distribution<>(low, high)(m_mersenneTwisterRng); } -- cgit v1.2.3