问题标签 [futex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
627 浏览

pthreads - 我可以将基于 futex 的互斥锁与 glibc-2.2 linuxthreads 互斥锁混合使用吗?

如果你不知道什么是futex和linuxthreads-0.9,请不要回复。

我可以将一个基于 futex 的互斥锁与来自 linuxthreads-0.8 或 -0.9 的互斥锁(在所有 glibc <=2.2 和所有 uClibc 中使用)混合在一起吗?

我需要进程间互斥锁(pshared 之一,PTHREAD_PROCESS_SHARED)。

那么,如果线程是由 linuxthreads pthread_manager 来启动和管理的,会不会被基于 futex 的 sleep 和 wake 混淆了呢?

我可以将基于 futex 的互斥锁用于进程间和线程间同步吗?

0 投票
1 回答
1249 浏览

mutex - 测量互斥体或 futex 延迟

如何测量互斥量、信号量或 futex 的延迟?我的意思是两个事件之间的延迟:解锁先前锁定的互斥锁和锁定该互斥锁。有两种情况:当所有线程/进程都在同一个 CPU 上时(重新调度线程需要多长时间)以及当第一个线程在第一个 CPU 上而第二个线程在第二个 CPU 上时。

甚至

这个时间很短(~1 k 个周期),所以我不能使用gettimeofday()

0 投票
1 回答
2050 浏览

linux - futex() 调用过多

在尝试发布到外部 MQ 队列时,我们在 Linux RedHat 机器上观察到我们的一个 Java 应用程序出现异常延迟(以前从未发生过)。对盒子进行了快速健康检查,CPU/内存使用情况似乎还不错。MQ 盒子也很好。重新启动我的Java进程,没有运气!在那之后我们抓拍了一张strace快照,里面到处都是futex()电话。

想知道是否有人可以就为什么会发生这么多锁提供任何线索(我知道这是一个非常开放的问题。取决于应用程序实际执行的操作)。

但我希望能更深入地了解这个问题。

0 投票
2 回答
3106 浏览

linux - 在用户空间使用 futex?

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

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

还是有系统调用?

更新:

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

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

有连贯的包装吗?

0 投票
1 回答
727 浏览

linux - 使用 do_futex 搞砸了?

我收到一个奇怪的错误。我实现了这两个功能:

并通过运行两个 Posix 线程来测试它们:

在 thread2 进行了一百万次左右的迭代后,我得到了断言:

./a.out 0 == res && (0 != (*flag)) 1 261129 1094433

这意味着系统调用 - 因此 do_futex() - 返回 0。Man 说只有在被 do_futex(WAKE) 调用唤醒时才应该这样做。但是在我进行 WAKE 调用之前,我将标志设置为 0。这里的标志似乎仍然是 1。

这是Intel,意思是强内存模型。因此,如果在线程 1 中我看到线程 2 中的系统调用的结果,我还必须看到调用之前线程 2 中的写入结果。

标志和指向它的所有指针都是易失的,所以我看不出 gcc 如何无法读取正确的值。

我很困惑。

谢谢!

0 投票
3 回答
9172 浏览

linux - 基于 Futex 的锁定机制

有人可以告诉我一个使用基于 futex 的锁定机制的例子吗?(适用于多核 x86 CPU、CentOS)

0 投票
2 回答
7302 浏览

python - Python 在 futex 调用中挂起

我有一个 Python 守护程序在生产中运行。它使用 7 到 120 个线程。最近最小的实例(7 个线程)开始出现挂起,而所有其他实例从未出现过此类问题。将 strace 附加到 python 进程表明所有线程都在调用 futex FUTEX_WAIT_PRIVATE,因此它们可能正在尝试锁定某些东西。

你将如何调试这样的问题?

请注意,这是一个从闪存运行的生产系统,因此磁盘写入也受到限制。

0 投票
1 回答
674 浏览

locking - 基于 futex 的 4 字节单写/多读锁

寻找一个最小的、基于futex的单写/多读锁实现,除了单个 4 字节 futex 状态变量之外,不需要空间开销。

一些背景知识:我有一个应用程序,它将在数千万到数亿个小对象中嵌入一个锁。由于锁定的非常细粒度的性质和应用程序的结构,我预计争用最小。此外,作家将很少见,而有竞争力的作家将更加罕见。由于所有这些原因,在这个特定的环境中,(理论上)容易出现“雷声”现象的解决方案是完全可以接受的。

0 投票
3 回答
3134 浏览

gcc - 小型 OpenMP 程序有时会死机(gcc、c、linux)

只需编写一个小 omp 测试,它并不能一直正常工作:

j在此示例中,从所有线程写入的用法不正确,但是

  • j 必须只有非确定性值

  • 我有一个冻结。

编译gcc-4.3.1 -fopenmp a.c -o gcc -static

在 4 核 x86_Core2 Linux 服务器上运行:$ ./gcc并被冻结(有时;例如 1 冻结 4-5 次快速运行)。

追踪:

为什么我会出现冻结(死锁)?

0 投票
1 回答
783 浏览

linux - 如何杀死使用 CLONE_THREAD 生成的线程并阻塞在内核空间的共享资源上?

我有一个测试用例,其中在 clone() 中使用 CLONE_THREAD 选项产生了线程。如果我想杀死一个特定的线程,我想我们应该在 systemcall() 中使用 SYS_tgkill。但是如果线程在内核空间中等待(比如 futex_wait),kill 是否会真正影响线程?

我尝试杀死以上述方式创建的线程。但是当 SIGKILL 被发送到同一线程时,整个进程都被杀死了。我在使用 syscall(SYS_tgkill,pid,tid,9) 时遗漏了什么?