Esempio n. 1
0
void * f(void * arg_) {
    arg_t * arg = (arg_t *)arg_;
    long a = arg->a, b = arg->b;
    long ninc_per_thread = arg->ninc_per_thread;
#if DBG
    printf("%ld : f(%ld,%ld)\n", myth_get_worker_num(), a, b);
#endif
    if (b - a == 1) {
        int i;
        for (i = 0; i < ninc_per_thread; i++) {
            myth_mutex_lock(arg->m);
            arg->p[0]++;
            myth_mutex_unlock(arg->m);
        }
        arg->r = a;
    } else {
        long c = (a + b) / 2;
        arg_t cargs[2] = { { ninc_per_thread, a, c, 0, arg->p, arg->m },
            { ninc_per_thread, c, b, 0, arg->p, arg->m }
        };
        myth_thread_t tid = myth_create(f, cargs);
        f(cargs + 1);
        myth_join(tid, 0);
        arg->r = cargs[0].r + cargs[1].r;
    }
    return 0;
}
Esempio n. 2
0
GLT_func_prefix void glt_mutex_unlock(GLT_mutex mutex) {
    CHECK(myth_mutex_unlock(mutex),0);
}