- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
eventfd()
是自 2.6.22 以来 Linux 中可用的新系统调用。调用签名是
int eventfd(unsigned int initval, int flags);
我正在利用这个调用来构建新光剑 Lock
可在轮询循环中使用的类。
Python Lock
对象以未阻塞状态开始。我对 eventfd 的使用要求初始值不为零。如果该值在内部是一个 uint64_t
,
The object contains an unsigned 64-bit integer (uint64_t) counter that is maintained by the kernel.
为什么初始值参数的类型是unsigned int
?
如果我使用非零值作为 Lock
的 unlocked 状态,则通过写入完成释放。没有干预获取的多个版本是错误的并且需要失败。这要求当事件对象包含非零值时写入应该失败。在其默认模式下,事件对象会将发送给它的值添加到 (uint64_t)0xfffffffffffffffe
,然后阻止写入调用。为了检测这种情况,我将进行非阻塞写入,将值推到触发这种情况的最大值之上:
If the addition would cause the counter's value to exceed the maximum, then the write(2) either blocks until a read(2) is performed on the file descriptor, or fails with the error EAGAIN if the file descriptor has been made non‐ blocking.
最佳答案
如果我没理解错的话,你想让这个野兽的状态在 0
和 UINT64_MAX-1
之间交替?
初始值的类型可能只是出于历史原因。一旦使用这样的接口(interface),它就会固定下来,之后很难更改。
如果您需要初始值为 UINT64_MAX-1
,为什么不使用 0
参数调用 eventfd
并执行 在将文件描述符传播给其他任何人之前,立即用
:UINT64_MAX-1
写入
int ev = eventfd(0, 0);
write(ev, &(uint64_t const){ UINT64_MAX-1 }, sizeof(uint64_t));
(好吧,你会添加错误检查代码,不是吗)
关于python - Linux eventfd 的初始值和在 pollable Lock 中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453063/
我在我的界面中创建了一个 Pollable Channel : Channels.java: final String INPUT = "input"; @Input(INPUT) PollableC
问题 eventfd()是自 2.6.22 以来 Linux 中可用的新系统调用。调用签名是 int eventfd(unsigned int initval, int flags); 我正在利用这个
我正在查看一些基于 spring 集成的代码,我注意到所有 int-http:inbound-gateways 都使用可轮询的请求 channel : 在配置中指定了一个显式轮询器:
我是一名优秀的程序员,十分优秀!