0
uint32 abc(int i)
{
    pthread_mutex_lock(&sharedvar_mutex[i]);

    sharedvar[i][j] = getvalue(i,j);

    pthread_mutex_unlock(&sharedvar_mutex[i]);
}

这种用法正确吗?

这会像下面这样工作吗:说 i 可以是 1 或 2 并且 j 是全局常数。i=1 的线程A 调用此函数并获取互斥锁sharesvar_mutex[1] 并修改sharedvar[1][j]。thread-B 进入函数时 i=1 将在互斥体上等待。

thread-C where i=2 可以进入并获取互斥量sharesvar_mutex[2]并修改sharedvar[2][j]。

它会这样工作吗?

谢谢!

4

1 回答 1

0

是的,它会这样工作。

您可能需要考虑的一件事。看起来您正在使用互斥体数组来防止 getvalue 函数在给定 i 的同时执行,并在分配给 sharedvar[] 时防止出现竞争条件。如果您希望防止 getvalue 对给定的 i 同时执行,这可能很好。但是,与原子操作相比,在数组中设置整数时使用互斥锁只是为了防止竞争条件是多余的。

于 2012-04-07T22:52:59.207 回答