#include #include #include #include #include #include #include static inline int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val3) { return syscall(SYS_futex, uaddr, op, val, timeout, uaddr2, val3); } static void futex_sleep(int ms) { static int round; struct timespec ts; int condition = 0; int rc; fprintf(stderr, "Before sleep %d\n", ++round); ts.tv_sec = 0; ts.tv_nsec = ms * 1000L * 1000L; rc = futex(&condition, FUTEX_WAIT, condition, &ts, NULL, 0); fprintf(stderr, "After sleep (error: %s)\n", (rc < 0 ? strerror(errno) : "none")); } int main() { while(1) { futex_sleep(200); } return 0; }