gpt4 book ai didi

linux - 在用户空间使用 futex?

转载 作者:IT王子 更新时间:2023-10-29 00:36:58 24 4
gpt4 key购买 nike

我需要在锁定/解锁上下文之外的用户空间中调用 do_futex() 的功能。也就是说,我不需要互斥体,而是内核调用 do_futex 的确切语义。

它似乎应该在用户空间中可用,因为其目的是尽量减少系统调用的数量,但我无法链接到它。

或者是否有系统调用?

更新:

我目前正在使用 syscall(__NR_futex, ...) 来运行 do_futex()。但是

  1. 我必须包含才能获得 __NR_futex,这很丑
  2. 我必须包含以获取 FUTEX_WAIT 和 FUTEX_WAKE,但我仍然没有获取 EWOULDBLOCK,或者 WAKE 的最大线程数

是否有连贯的包装器?

最佳答案

正如在 http://locklessinc.com/articles/obscure_synch/ 上所说的那样:

Finally, in order to block on a kernel wait-list, we need to use the Futex system call, which unfortunately isn't exposed by 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);
}

关于linux - 在用户空间使用 futex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com