首页 > 解决方案 > Linux 内核中的 WaitForMultipleObjects 等价物

问题描述

有没有人尝试将 Windows 驱动程序代码移植到 Linux,并在将 WaitForMultipleObjects API 替换到 Linux 时大吃一惊。

WaitForSingleObject 可以替换为 wait_event_interruptible..

但是WaitForMultipleObjects 呢?我看到他们将pthread_cond_wait 用于用户空间应用程序的帖子。linux内核空间的替代品是什么..

谢谢你的时间..

标签: linuxlinux-kernelevent-handlinglinux-device-driversleep

解决方案


您安排好表示事件的多个代码路径在同一个等待队列上调用 wake_up()。这将等效于带有 false WaitAll 的 WaitForMultipleObjects。

如何知道发生了哪个事件:一种可能性是使用带有鲜为人知的“关键”参数的唤醒变体:wake_up_poll()及其朋友。见linux/wait.h。“key”参数对于每个事件都应该是唯一的。然后,自定义等待队列(类型wait_queue_func_t)的唤醒处理函数。它接受四个参数;“key”是最后一个,默认处理程序未使用。“子类化”它并使用“key”参数来识别谁已经醒来。

对于 WaitAll=true,继续等待直到所有事件发生。


推荐阅读