2017-10-09 5 views
0

1つのシナリオがあります。ここでは、1つの関数(コードブロック)がn個の異なるコールバック関数によってアクセスされます。同時に、複数のコールバックが関数を呼び出す場合は、その関数にmutexを入れて、一度に1つのコールバックしかそれにアクセスできず、他のコールバックはクリティカルセクションの最初のコールバックまで待たなければなりません。 このデザインは正しいですか?代替設計はありますか?最初のコールバックが処理されている間、2番目のコールバックを待機させない方法はありますか?同じコードブロックが異なるコールバックによって同時にアクセスされる

+2

このような関数はリエントラント関数と呼ばれ、すべてのローカル変数またはインスタンス変数を使用する場合は正常に実行されます。共有/グローバル変数を使用する関数またはその一部を同期させる必要がある –

答えて

1

この機能によって異なります。

共有メモリを変更しますか?
競合状態を示す他の関数を使用していますか?

答えがイエスの場合は、ロックを適用してプロセスを同期させる必要があります。
ロックを最初からその関数の最後まで適用することはほとんど意味がありません。クリティカルセクション(共有データが更新されるコードピース)の前後にのみロックを適用します。

関連する問題