场景:我想在某些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);
}
原子地,我不知道如何。
答案 0 :(得分:2)
你的想法太复杂了
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
意在做你想要达到的目标。
如果你只需要在该函数中使用锁,那么将静态变量放在那里。如果您需要多个函数,请将其作为全局变量放在.c文件中。