在用户空间使用futex?

时间:2010-08-31 13:27:26

标签: linux futex

我需要在锁定/解锁上下文之外的用户空间中调用do_futex()函数。即,我不需要互斥锁,但内核的确切语义调用do_futex。

它似乎应该在用户空间中可用,因为其意图是最小化系统调用的数量,但我无法与它链接。

或者是否有系统调用?

更新

我目前正在使用系统调用(__ NR_futex,...)来运行do_futex()。但是

  1. 我必须包含以获取__NR_futex,这是丑陋的
  2. 我必须包括获取FUTEX_WAIT和FUTEX_WAKE,但我仍然没有得到EWOULDBLOCK,或WAKE的最大线程数
  3. 是否有连贯的包装?

2 个答案:

答案 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)系统调用可能就是你要找的。

man 2 futex

另外,在旁注中,man系统调用提供了所有系统调用的列表。