diff --git a/src/detsim.cpp b/src/detsim.cpp
index 8c784212d359fd7780cf96cd5b0e9a97118e66f1..986d1ee5172f3637dd20023704b66de7c4976688 100644
--- a/src/detsim.cpp
+++ b/src/detsim.cpp
@@ -24,6 +24,8 @@ static std::condition_variable syncCvToMain;
 static std::mutex syncMutexToWorker;
 static std::condition_variable syncCvToWorker;
 static std::atomic<unsigned> nArmed(0);
+static std::atomic<bool> mayStart(false);
+
 static std::atomic<std::chrono::system_clock::time_point> lastThreadEnd(std::chrono::system_clock::time_point::min());
 static std::atomic<unsigned long long> totalBytesWritten(0);
 
@@ -45,7 +47,7 @@ void worker(const std::string& dataHandlerName,
 		}
 		{
 			std::unique_lock<decltype(syncMutexToWorker)> lock(syncMutexToWorker);
-			syncCvToWorker.wait(lock);
+			syncCvToWorker.wait(lock, []{return mayStart.load();});
 		}
 		auto timingGenerator = timing::base::newHandler(timingHandlerName, threadNo);
 
@@ -140,6 +142,7 @@ int main(int argc, const char*argv[]) {
 	}
 	{
 		std::unique_lock<decltype(syncMutexToWorker)> lock(syncMutexToWorker);
+		mayStart = true;
 		syncCvToWorker.notify_all();
 	}
 	auto firstThreadStart = std::chrono::system_clock::now();