2017-01-03 3 views
1

これは、マルチスレッドシナリオでの例外処理シナリオ用です。必要に応じて相互排他の下にロックされた共有リソース上で、複数のスレッドが並行して動作しています。あるスレッドが例外に直面した場合、sem_trywaitを使って他のスレッドがセマフォを待っているかどうかを調べることができます。また、セマフォを待っているスレッドが見つかったら、例外が発生したというフラグを使用します。待っているスレッドが待っていて、さらに進める前に何らかの例外が発生したかどうかを確認することができます。例外が発生した場合、待機していた他のスレッドは、ここで正常な終了に向かいます。提案してください。 私の実際のqsは:sem_trywaitを使用できますか?誰かが共有セマフォを待っている場合、C Posixスレッドをチェックインする方法は?

+1

実際の質問は何ですか? –

+0

@ammoQ、sem_trywaitを使ってチェックできますか? –

+1

セマフォーを取得するかどうかは、すべて行います。誰かがそれを待っているかどうかは分かりません。 – wallyk

答えて

2

最も簡単な解決策は、スレッドステータスの追加メカニズムを設定することです。セマフォは、誰かが待っているかどうかを示すためのものではありません。ない場合は、いくつかのスレッドがセマフォと0を待っている場合のみ、スレッドによって書かれている世界的に目に見える変数で

、—に設定するには、1 —を言います。スレッドがセマフォを取得したいかどうかを知りたければ、変数の状態を調べてください。操作を正しく順序づけることによって変数をサンプリングする競合状態を処理することは、あまりにも困難ではないはずです。

関連する問題