ITPub博客

首页 > 应用开发 > > 线程一次性初始化

线程一次性初始化

作者:sunrh 时间:2019-08-29 13:51:42 0 删除 编辑

 多线程程序有时有这样的需求:不管创建了多少线程,有些初始化动作只能发生一次。如果由主线程来创建新线程,很容易做到这一点,即在创建依赖于该初始化的线程之前进行初始化。不过,对于库函数而言,这样处理就不可行,因为调用者在初次调用库函数之前可能已经创建了这些线程。因此需要这样的库函数:无论首次任何线程调用,都会执行初始化动作。

库函数可以通过pthread_once()实现一次性初始化。

int   pthread_once(pthread_once_t   *once_control,   void   (*init_routine)(void));

once_control的状态如下

1-->如果once_control = 0,那么pthread_once从未执行过,调用init_routine函数会执行。

2-->如果once_control = 1,那么pthread_once会陷入永久等待中,导致init_routine函数无法执行,直到phtread_once已经执行过一次为止。

3-->如果once_control = 2,由于pthread_once已经执行过一次,从而pthread_once会立即返回。

另外,参数once_control必须是一指针,指向初始化PTHREAD_ONCE_INIT的静态变量。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2505/viewspace-3161070/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    91
  • 访问量
    713