互斥锁定在修改全局变量的函数中

时间:2017-08-05 16:45:08

标签: c mutex

在函数内部,我调用另一个函数(changeValue),它对它修改的全局变量有一个互斥锁。其他函数也会定期调用changeValue。

changeValue锁定互斥锁,更改sum,然后解锁互斥锁。

changeValue属于void类型,因此它只是修改全局变量sum(例如sum = 10)。 在调用changeValue()之后,我想使用changeValue()修改的全局变量进行一些计算。

在调用changeValue()之后,sum仍然等于10吗?

1 个答案:

答案 0 :(得分:2)

由于锁只在changeValue函数内部处于活动状态,所以在函数调用之间一切都可能发生变化。只有在保持互斥锁时,这些值才是一致的。如果需要在changeValue函数之外的一个特定调用中计算的值,则需要在锁定仍处于活动状态时将它们分配给引用参数:

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

因此,您需要在所需值一致时复制它们,并静静地处理它们,而其他线程可能会依次更新它们。