Пример #1
0
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");
    }
}
Пример #2
0
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);
}
Пример #3
0
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
}
Пример #4
0
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();
}