http://blog.csdn.net/lmh12506/article/details/8452659

pthread_once()函数详解

在多线程环境中,有些事仅需要执行一次。通常当初始化应用程序时,可以比较容易地将其放在main函数中。但当你写一个库时,就不能在main里面初始化了,你可以用静态初始化,但使用一次初始化(pthread_once)会比较容易些。
int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));
功能:本函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。

在多线程编程环境下,尽管pthread_once()调用会出现在多个线程中,init_routine()函数仅执行一次,究竟在哪个线程中执行是不定的,是由内核调度来决定。

Linux Threads使用互斥锁和条件变量保证由pthread_once()指定的函数执行且仅执行一次,而once_control表示是否执行过。如果once_control的初值不是PTHREAD_ONCE_INIT(Linux Threads定义为0),pthread_once() 的行为就会不正常。在LinuxThreads中,实际"一次性函数"的执行状态有三种:NEVER(0)、IN_PROGRESS(1)、DONE (2),如果once初值设为1,则由于所有pthread_once()都必须等待其中一个激发"已执行一次"信号,因此所有pthread_once ()都会陷入永久的等待中;如果设为2,则表示该函数已执行过一次,从而所有pthread_once()都会立即返回0。

最新文章

  1. November 2nd Week 45th Wednesday 2016
  2. iOS 自定义UITabBarController的tabBar
  3. 大脑皮层是如何工作的 《人工智能的未来》(<On intelligence>)读书笔记
  4. H - Highways - poj 1751(prim)
  5. 转 Android - 文件操作
  6. Linux & Python 导航目录
  7. Eclipse+Java+OpenCV246人脸识别
  8. php利用iframe实现无刷新文件上传功能
  9. Delphi图像处理 -- 最小值
  10. JIT动态编译器的原理与实现之Interpreter3
  11. 爆炸,解体,入侵,你想得到的你想不到的大BUG们
  12. 使用try-with-resources优雅的关闭IO流
  13. IDEA创建完整目录maven项目
  14. opencv 霍夫变换 实现图片旋转角度计算
  15. iOS.NS_DEPRECATED_IOS
  16. 【Java入门提高篇】Day4 Java中的回调
  17. sklearn的画图
  18. Log4j发送邮件
  19. java.lang.Error: Unresolved compilation problem: 解决方案
  20. C++中的public、private、protected成员继承问题

热门文章

  1. 记录netcore一次内存暴涨的坑
  2. Pandas常用操作 - 新增数据列
  3. Lesson11——NumPy 位运算
  4. MASA Framework - DDD设计(1)
  5. k8s笔记--驱逐与重调度,以及deschueduler的一次实验
  6. 磁盘管理+三剑客之awk
  7. 02编程语言与python介绍
  8. 【流行前沿】联邦学习 Partial Model Averaging in Federated Learning: Performance Guarantees and Benefits
  9. Go的优雅终止姿势
  10. Go内存逃逸分析