gpt4 book ai didi

events - IO/Kit 同步原语

转载 作者:行者123 更新时间:2023-12-05 01:16:00 25 4
gpt4 key购买 nike

我正在寻找 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com