pthread_once的使用:
pthread_once_t once_block = PTHREAD_ONCE_INIT;
pthread_mutex_t mutex;
void once_init_routine(void)
{
int status;
status = pthread_mutex_init(&mutex, NULL);
if(status != 0)
err_abort(status, "init Mutex");
}
需要初始化mutex时,只要调用pthread_once(&once_block, once_init_routine)即可。
pthread_once函数首先检查控制变量,以判断是否已经完成初始化,如果完成,pthread_once会简单的返回,否则,pthread_once调用初始化函数,并且记录下初始化被完成。如果在一个线程初始化时,另外的线程 调用pthread_once,则调用的线程将等待,知道那个线程完成初始化后返回,换句话说,当调用pthread_once成功返回时,调用者能够肯定所有的额状态已经初始化完毕。
这里once_init_routine用来初始化互斥量。pthread_once的使用保证他只被调用一次。
一般我们可以使用一个布尔变量和一个静态的初始化的互斥量来编写一次性初始化代码。
阅读(1017) | 评论(0) | 转发(0) |