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



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

I/O 工具包的 IORecursiveLock 不执行超时。 我可以使用BSD锁或马赫锁。 内核的 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

最新更新