Esempio n. 1
0
int Chan_receive(Chan_T c, void *ptr, int size) {
    int n;
    assert(c);
    assert(ptr);
    assert(size >= 0);
    Sem_wait(&c->recv);
    n = *c->size;
    if (size < n)
        n = size;
    *c->size = n;
    if (n > 0)
        memcpy(ptr, c->ptr, n);
    Sem_signal(&c->sync);
    Sem_signal(&c->send);
    return n;
}
Esempio n. 2
0
int Chan_send(Chan_T c, const void *ptr, int size) {
    assert(c);
    assert(ptr);
    assert(size >= 0);
    Sem_wait(&c->send);
    c->ptr = ptr;
    c->size = &size;
    Sem_signal(&c->recv);
    Sem_wait(&c->sync);
    return size;
}
Esempio n. 3
0
void incr(struct args *p) {
        int i;
        static int j;

        for (i = 0; i < 10000; i++) {
                Sem_wait(p->mutex);
                *p->ip = *p->ip + 1;
                Sem_signal(p->mutex);
        }
        printf("%d:(%d:y)=%d\n", j, Thread_self(), y);
        j++;
}