私はWindowsデバイスドライバをMac OS Xに移植しています。WindowsコードはKMUTEXを使用しています。これは同じスレッドによって複数回取得できる再帰的なロックです。他のスレッドは取得するまで待つ必要がありますが、タイムアウトが発生すると取得は失敗します。OS Xカーネルでタイムアウトを伴う再帰ミューテックスを実装するには?
I/OキットのIORecursiveLockはタイムアウトを行いません。 BSDロックやマッハロックを使用することができます。カーネルのBSD部分は、msleep()とwakeup()で条件変数を提供します。
条件変数が私の望んだことをするかどうかはわかりません。
BSDのsem_timedwait(3)はユーザー空間にあります。
キースショートリッジは、userspace set_timedwait implementationを提供します。あるスレッドは、sem_wait()を呼び出し、タイムアウトが発生した場合に最初のスレッドにシグナルを送信する別のスレッドを呼び出します。
私は、ポートリッジのコードをカーネルに移植することができましたが、私はそれを台無しにする危険はありません。 Googleは他の洞察を得ていません。私に手がかりを与えることができますか?