Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294129
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2019-06-06 22:08
文章分类
文章存档

2020年(1)

2019年(2)

我的朋友

分类: C/C++

2019-06-14 21:45:33

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






阅读(269251) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:线程介绍

给主人留下些什么吧!~~