diff --git a/dynare++/tl/cc/sthread.cc b/dynare++/tl/cc/sthread.cc
index 36e21b9f3ac87445dfad2cc1bdd9f8d6abe091fa..751e77f54174ac25e0e4ec88b75f4e1019735d36 100644
--- a/dynare++/tl/cc/sthread.cc
+++ b/dynare++/tl/cc/sthread.cc
@@ -28,7 +28,15 @@ namespace sthread
             (*it)->operator()(mut_threads);
             std::unique_lock<std::mutex> lk2{mut_cv};
             counter--;
-            std::notify_all_at_thread_exit(cv, std::move(lk2));
+            /* First notify the thread waiting on the condition variable, then
+               unlock the mutex. We must do these two operations in that order,
+               otherwise there is a possibility of having the main process
+               destroying the condition variable before the thread tries to
+               notify it (if all other threads terminate at the same time and
+               bring the counter down to zero).
+               For that reason, we cannot use std::notify_all_at_thread_exit() */
+            cv.notify_one();
+            lk2.unlock();
           }};
         th.detach();
         ++it;