@@ -162,7 +162,7 @@ struct scheduler {
162162 finished_flag(false ) {
163163 // Stopping condition
164164 auto finished = [this ]() {
165- return finished_flag.load (std::memory_order_acquire );
165+ return finished_flag.load (std::memory_order_relaxed );
166166 };
167167
168168 // Spawn num_threads many threads on startup
@@ -176,7 +176,7 @@ struct scheduler {
176176 }
177177
178178 ~scheduler () {
179- finished_flag.store (true , std::memory_order_acquire );
179+ finished_flag.store (true , std::memory_order_relaxed );
180180 for (unsigned int i = 1 ; i < num_threads; i++) {
181181 spawned_threads[i - 1 ].join ();
182182 }
@@ -203,7 +203,7 @@ struct scheduler {
203203 }
204204
205205 // All scheduler threads quit after this is called.
206- void finish () { finished_flag.store (true , std::memory_order_release ); }
206+ void finish () { finished_flag.store (true , std::memory_order_relaxed ); }
207207
208208 // Pop from local stack.
209209 Job* try_pop () {
@@ -246,7 +246,7 @@ struct scheduler {
246246 std::vector<Deque<Job>> deques;
247247 std::vector<attempt> attempts;
248248 std::vector<std::thread> spawned_threads;
249- std::atomic<int > finished_flag;
249+ std::atomic<bool > finished_flag;
250250
251251 // Start an individual scheduler task. Runs until finished().
252252 template <typename F>
0 commit comments