我需要调用一个返回唯一ID的函数
int getid()
{
static id=0;
id++;
return id;
}
多线程需要调用此函数,我的问题是我不确定我需要锁定互斥锁的位置,
我需要在调用函数之前和之后锁定,如下所示
pthread_mutex_lock( &id );
int id = getid()
pthread_mutex_unlock( &id );
有人可以帮助我吗?
答案 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 );
}