linux - Linux 内核中的 WaitForMultipleObjects 等价物
问题描述
有没有人尝试将 Windows 驱动程序代码移植到 Linux,并在将 WaitForMultipleObjects API 替换到 Linux 时大吃一惊。
WaitForSingleObject 可以替换为 wait_event_interruptible..
但是WaitForMultipleObjects 呢?我看到他们将pthread_cond_wait 用于用户空间应用程序的帖子。linux内核空间的替代品是什么..
谢谢你的时间..
解决方案
您安排好表示事件的多个代码路径在同一个等待队列上调用 wake_up()。这将等效于带有 false WaitAll 的 WaitForMultipleObjects。
如何知道发生了哪个事件:一种可能性是使用带有鲜为人知的“关键”参数的唤醒变体:wake_up_poll()
及其朋友。见linux/wait.h
。“key”参数对于每个事件都应该是唯一的。然后,自定义等待队列(类型wait_queue_func_t
)的唤醒处理函数。它接受四个参数;“key”是最后一个,默认处理程序未使用。“子类化”它并使用“key”参数来识别谁已经醒来。
对于 WaitAll=true,继续等待直到所有事件发生。
推荐阅读
- matlab - 如何优化我的 MATLAB 多项式可约化程序?
- javascript - React + Redux:设置 redux 状态或更改 redux 状态后页面不重新渲染
- powershell - 如何批量下载文件并从名称列表中重命名它们
- spring-boot - 带有 ssl (https) 的 Zull 代理 Eureka 客户端没有注册到 Eureka Server
- c# - C# 下载具有给定参数的网页内容
- c# - LINQ 查询:具有另一个表的 Count 元素的新查询对象
- java - 休眠中ManyToMany关系的无限递归
- sql - 如何从 SQL 加载器加载当前月份记录?
- python - 如何在 NLP 中提取不寻常的生词
- node.js - Socket.io 不会立即在新创建的房间中发送分组事件