我需要调用一个返回唯一ID的函数,
int getid()
{
static id=0;
id++;
return id;
}
多个线程需要调用这个函数,我的问题是我不确定我需要在哪里锁定互斥体,
在调用如下函数之前和之后是否需要锁定
pthread_mutex_lock( &id );
int id = getid()
pthread_mutex_unlock( &id );
有人可以帮我吗?
我需要调用一个返回唯一ID的函数,
int getid()
{
static id=0;
id++;
return id;
}
多个线程需要调用这个函数,我的问题是我不确定我需要在哪里锁定互斥体,
在调用如下函数之前和之后是否需要锁定
pthread_mutex_lock( &id );
int id = getid()
pthread_mutex_unlock( &id );
有人可以帮我吗?
只要在访问共享状态之前,它被锁定在哪里并不重要。如果互斥锁在函数内部,则不太容易出错。像这样最小的东西会起作用:
int getid()
{
static int id=0;
pthread_mutex_lock( &mutex );
int newId = ++id;
pthread_mutex_unlock( &mutex );
return newId;
}
静态变量的初始化存在一些线程安全的问题,您可能需要研究这些问题。
对于单个整数,您不需要完整的互斥锁,原子增量就足够了:
int getid() {
static int id = 0;
return __sync_fetch_and_add( &id, 1 );
}