关于pthread互斥使用

时间:2012-04-07 01:53:09

标签: pthreads mutex

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

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

    pthread_mutex_unlock(&sharedvar_mutex[i]);
}

这种用法是否正确?

这可以如下工作: 说我可以是1或2,j是一个全局常数。 thread-A,其中i = 1调用此函数并获取互斥共享varvar_mutex[1]并进行修改 sharedvar [1] [j]的。 线程B,当i = 1时,它进入函数将等待互斥锁。

thread-C,其中i = 2可以输入并获取互斥共享变量_mutex [2]并修改sharedvar [2] [j]。

这样会这样吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,它会以这种方式运作。

您可能想要考虑一件事。看起来你正在使用互斥锁数组来防止给定i同时执行getvalue函数,并在分配给sharedvar []时防止竞争条件。如果你希望阻止getvalue同时执行给定的i,这可能是好的。但是,与原子操作相比,在数组中设置整数时使用互斥锁来防止竞争条件是过度的。