2012-02-24 7 views
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); 

強制的に「正しい」方法は何ですか?

答えて

0

私はそれがあなたが聞きたいと思うものではないと思っていますが、セマフォを "強制"しないでください。これは新しい問題を導入するだけです(おそらく非常に微妙で、見つけにくいでしょう)。

セマフォの取得に関するガードがあった場合は、シグナルと同じガードを使用する必要があります。はい、以前は考えられていなかった設計変更が導入されるかもしれませんが、これは正しいことです。

具体的な問題として、userland_varのコピーをモジュールセマフォ使用状況の状態として保存することがその方法の1つになります。

+0

私はcharデバイスを作成していますが、そのデバイスは開かれている時間に1度しか書き込めません。したがって、私がそれに書き込むとき、私はセマフォをつかみ、それを閉じるとセマフォを解放します。 "release"が呼び出されると、セマフォの状態は不明です(ユーザが開いている間にデバイスに書き込んだのですか?) –

+0

そして、どういうわけかキャラクタデバイスは、それが書き込まれたかどうかを知ることができません。思わないでしょ?状態を適切に保つだけです。 –

+0

まあ、現在、私はセマフォに...状態を維持しています。 –

関連する問題