2017-08-05 86 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; 
    } 

因此,尽管它们是一致的,你要复制所需的值,并静静地处理它们,而其他线程可能会依次更新它们。