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