2017-08-05 17 views
0

関数内で、変更するグローバル変数にmutexロックを持つ別の関数(changeValue)を呼び出しています。 changeValueは他の関数によって定期的に呼び出されます。グローバル変数を変更する関数のミューテックスロック

changeValueはmutexをロックし、sumを変更してmutexのロックを解除します。

changeValueはvoid型であるため、グローバル変数sum(たとえばsum = 10)を変更するだけです。 changeValue()を呼び出した後、changeValue()によって変更されたグローバル変数を使用して計算を行いたいとします。

changeValue()を呼び出した後の合計は10になりますか?

+0

なぜグローバル変数で何かを合計したいのですか?私は最高の答えと思います:https://stackoverflow.com/a/34558/3140754 –

+0

mutexのロックを解除した後にsomethngが値を変更していない場合、いいえ。 –

答えて

2

changeValue関数内でのみロックがアクティブなので、関数呼び出し間ですべてが変更される可能性があります。値は、mutexが保持されている間のみ一致します。あなたは関数ChangeValue外の1回の特定の呼び出しで計算された値が必要な場合は、ロックがまだアクティブである間、あなたは参照パラメータに割り当てる必要があります。

void changeValue (int* iValue1, int* iValue2) 
    { 
    // acquire the mutex, compute values, assign iValue1 and iValue2, release the mutex 
    return; 
    } 

彼らは一貫している間、あなたが必要な値をコピーしています、それらを静かに処理し、他のスレッドはそれらを順番に更新するかもしれません。

関連する問題