#include #include #include #include #include #include #include #include #include #include /* Versão sem time-out */ int futex_wait(void *addr, int val1) { int r; r = syscall(SYS_futex, addr, FUTEX_WAIT, val1, NULL, NULL, 0); if (r == -1) { if (errno == EINTR) printf("Sinal recebido.\n"); else if (errno == EWOULDBLOCK) printf("Futex_wait não bloqueou.\n"); else { perror(""); exit(0); } } return r; } /* Returns the number of threads which have been queued */ int futex_wake(void *addr, int n) { int r; if ((r = syscall(SYS_futex, addr, FUTEX_WAKE, n, NULL, NULL, 0)) == -1) { perror(""); exit(0); } return r; }