与pthread互斥

时间:2012-11-18 01:38:45

标签: linux multithreading synchronization pthreads

我需要调用一个返回唯一ID的函数

int getid()
{
static id=0;
id++;
return id;

}

多线程需要调用此函数,我的问题是我不确定我需要锁定互斥锁的位置,

我需要在调用函数之前和之后锁定,如下所示

  pthread_mutex_lock( &id );
  int id = getid()
  pthread_mutex_unlock( &id );

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

只要在访问共享状态之前锁定它的位置并不重要。如果互斥锁定在函数内部,则不太容易出错。像这样最小的东西可以起作用:

int getid()
{
static int id=0;

pthread_mutex_lock( &mutex );
int newId = ++id;
pthread_mutex_unlock( &mutex );

return newId; 
}

关于静态变量初始化的一些问题是线程安全的,你可能想要查看。

答案 1 :(得分:2)

对于单个整数,您不需要完整的互斥量,atomic increment就足够了:

int getid() {
    static int id = 0;
    return __sync_fetch_and_add( &id, 1 );
}