我们对pthreads使用一次性初始化,如下所示:
/* define a statically initialized pthread_once_t variable */
pthread_once_t once_var = PTHREAD_ONCE_INIT;
/* we call pthread_once function in threads */
int pthread_once(pthread_once_t *once_control, void (*init)(void));
Run Code Online (Sandbox Code Playgroud)
当多个线程要改变pthread_once_t变量的状态时,我们是否需要一个互斥锁来保护它?
不,你不需要互斥锁.这个pthread_once调用(这里的链接)保证只执行一次,即使多个线程同时尝试它.
正是这样once_var才能保护呼叫不被执行多次.如果您符合以下条件,它将按预期工作:
once_var为PTHREAD_ONCE_INIT; 和once_var不是自动存储持续时间(例如,在堆栈上); 和once_var变量.