我需要在锁定/解锁上下文之外的用户空间中调用do_futex()函数。即,我不需要互斥锁,但内核的确切语义调用do_futex。
它似乎应该在用户空间中可用,因为其意图是最小化系统调用的数量,但我无法与它链接。
或者是否有系统调用?
更新
我目前正在使用系统调用(__ NR_futex,...)来运行do_futex()。但是
是否有连贯的包装?
答案 0 :(得分:2)
正如http://locklessinc.com/articles/obscure_synch/所述:
最后,为了阻止内核等待列表,我们需要使用Futex系统调用,遗憾的是linux / futex.h没有公开。
他们定义了自己的简单包装器:
#include <linux/futex.h>
#include <sys/syscall.h>
static long sys_futex(void *addr1, int op, int val1, struct timespec *timeout,
void *addr2, int val3) {
return syscall(SYS_futex, addr1, op, val1, timeout, addr2, val3);
}
答案 1 :(得分:1)
futex(2)系统调用可能就是你要找的。 p>
man 2 futex
另外,在旁注中,man系统调用提供了所有系统调用的列表。