当前位置:嗨网首页>书籍在线阅读

05-库函数视角下的线程特有数据

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

31.3.1 库函数视角下的线程特有数据

要了解线程特有数据相关API的使用,需要从使用这一技术的库函数角度来考虑如下问题。

  • 该函数必须为每个调用者线程分配单独的存储,且只需在线程初次调用此函数时分配一次即可。
  • 在同一线程对此函数的后续所有调用中,该函数都需要获取初次调用时线程分配的存储块地址。由于函数调用结束时会释放自动变量,故而函数不应利用自动变量存放存储块指针,也不能将指针存放于静态变量中,因为静态变量在进程中只有一个实例。Pthreads API提供了函数来处理这一情况。
  • 不同(无相互依赖关系)函数各自可能都需要使用线程特有数据。每个函数都需要方法来标识其自身的线程特有数据(键),以便与其他函数所使用的线程特有数据有所区分。
  • 当线程退出时,函数无法控制将要发生的情况。这时,线程可能会执行该函数之外的代码。不过,一定存在某些机制(解构器),在线程退出时会自动释放为该线程所分配的存储。若非如此,随着持续不断地创建线程,调用函数和终止线程,将会引发内存泄露。