events - IO/Kit 同步原语

标签 events synchronization iokit

我正在寻找 IO/Kit 中的等待/信号同步原语,其工作方式如下:

Thread1 : wait(myEvent)//阻塞thread1

Thread2 : wait(myEvent)//阻塞thread2

Thread3 : signal(myEvent)//释放thread1或thread2之一

这不能使用 IOLock 来完成,因为锁定/解锁操作将由不同的线程进行,根据我读过的一些文档,这是一个坏主意。

Thread1、2、3可以是用户线程,也可以是内核线程。

我还希望有一个可选的等待操作超时。

感谢您的帮助!

最佳答案

你想要函数 IOLockSleepDeadline() , 在 <IOKit/IOLocks.h> 中声明.

您设置了单个 IOLock某处 IOLockAlloc()在你开始之前。然后,线程 1 和 2 使用 IOLockLock() 锁定 IOLock并立即放弃锁并通过调用 IOLockSleepDeadline() 进入休眠状态.当线程 3 就绪时,它调用 IOLockWakeup() (如果您只想唤醒一个线程,请使用 oneThread = true)。这会导致线程 1 或 2 唤醒并立即获取锁(因此它们需要解锁或再次休眠)。

IOLockSleep()工作方式类似,但没有超时。

您可以使用 the IOCommandGate's commandSleep() method 做类似的事情如果您的驱动程序已经以 IOWorkLoop 为中心,这可能更合适.

关于events - IO/Kit 同步原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805943/

相关文章:

ios - IOHIDEventSystemClientScheduleWithRunLoop 与 EXC_BAD_ACCESS

events - 启动确认服务

javascript - Node.js 和 hapi : fetching data from a database synchronously

c# - 如何让线程休眠直到收到异步函数的回调?

macos - 从 Delphi for OSX64 中的 Macapi.IOKit 导入 IORegistryEntrySearchCFProperty

macos - PCIDriverKit 授权检查失败(将 KEXT 迁移到 DEXT)

events - InDesign CC 2014 扩展脚本 : How to reliably close document after asynchronous PDF export

python - 如何将系统音频抓取到python?

javascript - 捕获 <select> 列表中的事件

mysql集群自增不同步