void thread_func(void *arg) { ABT_thread my_handle; ABT_thread_state my_state; ABT_thread_self(&my_handle); ABT_thread_get_state(my_handle, &my_state); if (my_state != ABT_THREAD_STATE_RUNNING) { fprintf(stderr, "ERROR: not in the RUNNUNG state\n"); } ABT_thread_release(my_handle); thread_arg_t *t_arg = (thread_arg_t *)arg; ABT_thread next; ABT_test_printf(1, "[TH%d]: before yield\n", t_arg->id); next = pick_one(t_arg->threads, t_arg->num_threads); ABT_thread_yield_to(next); ABT_test_printf(1, "[TH%d]: doing something ...\n", t_arg->id); next = pick_one(t_arg->threads, t_arg->num_threads); ABT_thread_yield_to(next); ABT_test_printf(1, "[TH%d]: after yield\n", t_arg->id); ABT_task task; ABT_task_self(&task); if (task != ABT_TASK_NULL) { fprintf(stderr, "ERROR: should not be tasklet\n"); } }
void thread_func(void *arg) { thread_arg_t *t_arg = (thread_arg_t *)arg; ABT_thread next; ABT_test_printf(1, "[TH%d]: before yield\n", t_arg->id); next = pick_one(t_arg->threads, t_arg->num_threads); ABT_thread_yield_to(next); ABT_test_printf(1, "[TH%d]: doing something ...\n", t_arg->id); next = pick_one(t_arg->threads, t_arg->num_threads); ABT_thread_yield_to(next); ABT_test_printf(1, "[TH%d]: after yield\n", t_arg->id); }
void accalt_yield_to(ACCALT_ult ult) { #ifdef ARGOBOTS ABT_thread_yield_to(ult); #endif #ifdef MASSIVETHREADS myth_yield(0); #endif #ifdef QTHREADS qthread_yield(); #endif }
void thread_func_yield_to(void *arg) { arg_t *my_arg = (arg_t *)arg; int eid = my_arg->eid; int tid = my_arg->tid; int nid = (tid + 1) % num_threads; ABT_thread next = g_threads[eid][nid]; int i; for (i = 0; i < iter; i++) { ABT_thread_yield_to(next); } ABT_thread_yield(); }