【问题标题】:Mutex lock in function that modifies global variables修改全局变量的互斥锁函数
【发布时间】:2017-08-06 01:23:14
【问题描述】:

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

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

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

在我调用 changeValue() 后 sum 是否仍等于 10?

【问题讨论】:

  • 为什么要用全局变量求和?我认为最佳答案:stackoverflow.com/a/34558/3140754
  • 如果在您解锁互斥锁后有其他东西改变了值,则不会。

标签: c mutex


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多