代码之家  ›  专栏  ›  技术社区  ›  Mike Crawford

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

  •  4
  • Mike Crawford  · 技术社区  · 7 年前

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

    输入/输出工具包的IORecursiveLock不超时。我可以使用BSD锁或马赫锁。内核的BSD部分提供了带有msleep()和wakeup()的条件变量。

    BSD上的sem\u timedwait(3)位于用户空间中。

    Keith Shortridge提供了一个 userspace set_timedwait implementation 。一个线程调用sem_wait(),而另一个线程在超时时向第一个线程发送信号。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ohad Rubin    7 年前

    此链接可能会有所帮助,根据文档,它包含您需要的内容,可能是wait\u result\u tlck\u mtx\u sleep\u方法的截止日期: https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html#//apple_ref/doc/uid/TP30000905-CH218-BEHJDFCA