gpt4 book ai didi

multithreading - 如何在 OS X 内核中实现带有超时的递归互斥锁?

转载 作者:行者123 更新时间:2023-12-03 12:44:49 28 4
gpt4 key购买 nike

我正在将 Windows 设备驱动程序移植到 Mac OS X。Windows 代码使用 KMUTEX。这是一个递归锁,可以被同一个线程多次获取。其他线程必须等待才能获取它,但如果发生超时,则获取将失败。

I/O Kit 的 IORecursiveLock 不会超时。我可以使用 BSD 锁或 Mach 锁。内核的 BSD 部分通过 msleep() 和wakeup() 提供条件变量。

我不清楚条件变量是否会做我想要的。

BSD 上的 sem_timedwait(3) 在用户空间中。

Keith Shortridge 提供了一个 userspace set_timedwait implementation .一个线程调用 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

关于multithreading - 如何在 OS X 内核中实现带有超时的递归互斥锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836363/

28 4 0