В linux в качестве аналога мутексов можно использовать futex (Fast Userspace Locking). Однако, в библиотеке glibc такой функции нет.
Реализуем собственный вызов системной функции futex.
#ifndef futex_h
#define futex_h
#include <linux/futex.h>
#include <sys/time.h>
#ifdef __cplusplus
extern "C" {
#endif//__cplusplus
int futex(int * uaddr, int op, int val, const struct timespec * timeout, int * uaddr2, int val3);
#ifdef __cplusplus
}
#endif//__cplusplus
#endif//futex_h
#include "futex.h"
#include <sys/syscall.h>
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);
}
Дискуссия