2017-08-05 89 views
0

在函數內部,我調用另一個函數(changeValue),它對它修改的全局變量具有互斥鎖。其他函數也會週期性地調用changeValue。互斥鎖在函數中修改全局變量

changeValue鎖定互斥鎖,更改總和,然後解鎖互斥鎖。

changeValue是void類型的,所以它只是修改全局變量和(例如sum = 10)。 在我調用changeValue()之後,我想使用由changeValue()修改的全局變量進行一些計算。

在我致電changeValue()後總和仍然等於10嗎?

+0

爲什麼你想總結一些全局變量?我認爲最好的答案是:https://stackoverflow.com/a/34558/3140754 –

+0

如果在解鎖互斥鎖後某些其他人更改了值,則不會。 –

回答

2

由於鎖僅在changeValue函數內有效,因此函數調用之間的所有內容都可能會發生變化。只有在互斥鎖被保持時,這些值纔是一致的。如果您需要在ChangeValue函數以外的一個具體的調用計算的值,則需要給它們分配給參考參數,同時鎖仍然有效:

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

因此,儘管它們是一致的,你要複製所需的值,並靜靜地處理它們,而其他線程可能會依次更新它們。