Mik*_*ord 5 macos multithreading mutex timeout driver
我正在将 Windows 设备驱动程序移植到 Mac OS X。Windows 代码使用 KMUTEX。这是一个递归锁,同一线程可以多次获取。其他线程必须等待才能获取,但如果超时则获取失败。
I/O Kit 的 IORecursiveLock 不执行超时操作。我可以使用 BSD 锁或 Mach 锁。内核的 BSD 部分通过 msleep() 和wakeup() 提供条件变量。
我不清楚条件变量是否能达到我想要的效果。
BSD 上的 sem_timedwait(3) 位于用户空间中。
Keith Shortridge 提供了一个用户空间 set_timedwait 实现。一个线程调用 sem_wait(),而另一个线程在发生超时时向第一个线程发送信号。
我可以将 Shortridge 的代码移植到内核,但我不想冒把它搞砸的风险。谷歌没有提供其他见解。你能给我一个线索吗?
此链接可能会有所帮助,通过文档,这有您需要的内容,也许是方法 wait_result_tlck_mtx_sleep_deadline: https: //developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html#// apple_ref/doc/uid/TP30000905-CH218-BEHJDFCA
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |