3

场景:我想在某个 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); 
   } 

原子地,我不知道如何。

4

1 回答 1

2

你想的太复杂了

static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

是为了做你想做的事。

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

于 2013-03-10T15:35:57.783 回答