0
私はLinuxのcharドライバを書いていますが、ドライバを閉じるとセマフォをリリースしたいと思います。つまり、ユーザがまだセマフォを取得しているかどうかはわかりません。これを行う適切な方法は何ですか?"1"セマフォをオープン状態にするにはどうすればよいですか?
/* Not my code, but demonstrates the problem I face */
if (userland_var)
down(&my_sem);
/* ... */
/* Okay, now I want to release this semaphore, if held,
but I don't know the value of userland_var */
/* OPTION 1: */
up(&my_sem);
/* OPTION 2: */
my_sem = sema_init(&my_sem, 1);
/* OPTION 3: */
down_trylock(&my_sem);
up(&my_sem);
強制的に「正しい」方法は何ですか?
私はcharデバイスを作成していますが、そのデバイスは開かれている時間に1度しか書き込めません。したがって、私がそれに書き込むとき、私はセマフォをつかみ、それを閉じるとセマフォを解放します。 "release"が呼び出されると、セマフォの状態は不明です(ユーザが開いている間にデバイスに書き込んだのですか?) –
そして、どういうわけかキャラクタデバイスは、それが書き込まれたかどうかを知ることができません。思わないでしょ?状態を適切に保つだけです。 –
まあ、現在、私はセマフォに...状態を維持しています。 –