在函数内安全地初始化锁/互斥锁

时间:2013-03-10 14:32:39

标签: c pthreads

场景:我想在某些foo.h / foo.c模块中提供一个孤立的foo。该函数应该能够以线程安全的方式执行。

问题如何在函数内安全地初始化互斥锁(或任何其他锁抽象)。我以为我可以这样:

foo(){
   static pthread_mutex_t *lock=NULL;
   if (lock == NULL){
     lock = init_lock(lock); 
   } 
   //acquire (lock)
   // foo ; 
   //release (lock)
}

然后我必须执行:

if (lock == NULL){
     lock = init_lock(lock); 
   } 
原子地,我不知道如何。

1 个答案:

答案 0 :(得分:2)

你的想法太复杂了

static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

意在做你想要达到的目标。

如果你只需要在该函数中使用锁,那么将静态变量放在那里。如果您需要多个函数,请将其作为全局变量放在.c文件中。