From: Brian Norris Date: Thu, 6 Sep 2012 20:55:05 +0000 (-0700) Subject: libthreads: don't spin on THREAD_JOIN X-Git-Tag: pldi2013~235^2^2~2 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=commitdiff_plain;h=98ca2597879be0ec9484c4a32dae1c10607c9c17 libthreads: don't spin on THREAD_JOIN THREAD_JOIN can now be implemented properly here. We shouldn't have to spin, waiting for another thread to complete. This may help improve the ModelChecker architecture, since we will never have NULL actions passed to the ModelChecker. --- diff --git a/libthreads.cc b/libthreads.cc index 98df424..4d6a024 100644 --- a/libthreads.cc +++ b/libthreads.cc @@ -23,8 +23,7 @@ int thrd_create(thrd_t *t, thrd_start_t start_routine, void *arg) int thrd_join(thrd_t t) { Thread *th = model->get_thread(thrd_to_id(t)); - while (th->get_state() != THREAD_COMPLETED) - model->switch_to_master(NULL); + model->switch_to_master(new ModelAction(THREAD_JOIN, std::memory_order_seq_cst, th, thrd_to_id(t))); return 0; }