线程相关函数(POSIX线程):
创建单个线程
#include <pthread.h>
// 若成功返回0,出错返回正的Exxx值
int pthread_create(pthread_t *tid, // 每个线程在进程中的线程ID
const pthread_attr_t *attr, // 线程属性,默认为0
void * (*func)(void *), // 该线程执行的函数
void *arg); // 上述函数的参数
等待一个给定线程终止
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值
int pthread_join(pthread_t *tid, void **status); // status存储所等待线程的返回值 // 类似于waitpid()函数
获取线程ID
#include <pthread.h> // 返回调用线程自身的ID,不同于pthread_create中的线程在进程中的ID
pthread_t pthread_self(void);
将某个线程转变为脱离状态
一个线程是可汇合的(joinable)或者脱离的(detached)
一个可汇合的线程终止时,它的线程ID和退出状态将保留到另一个线程对它调用pthread_join
一个脱离的线程终止时,所有相关资源都被释放,我们无法等待它的终止
如果我们需要知道某个线程什么时候终止,那么最好将其保持在可汇合状态
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值
int pthread_detach(pthread_t tid);
终止一个线程
终止一个线程有三种方法:
1.代用pthread_exit
2.启动线程的函数(pthread_create的第三个参数)可以返回
3.该线程所在进程的main函数返回或任何线程调用了exit
#include <pthread.h> void pthread_exit(void *status);
处理线程的特定数据
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值
// 当一个使用线程特定数据的函数被调用时,pthread_once通常被此函数调用
int pthread_once(pthread_once_t *onceptr, // pthread_once使用onceptr指向的变量中的值保证init只被调用一次
void (*init)(void)); // 若成功返回0,出错返回正的Exxx值
// 创建某个线程特定数据
int pthread_key_create(pthread_key_t *keyptr, // 特定数据中被创建的键,而数据指针是值,但我们需要
void (*destructor)(void *value)); // 用到的数据其实是该指针指向的位置的数据
获取和存放与某个键关联的值
#include <pthread.h> // 返回指向线程特定数据的指针,即上述的值
void *pthread_getspecific(pthread_key_t key); // 若成功返回0,出错返回正的Exxx值
int pthread_setspecific(pthread_key_t key, const void *value);
相关内容:
互斥锁
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值
// mptr通常被初始化为PTHREAD_MUTEX_INITIALIZER
int pthread_mutex_lock(pthread_mutex_t *mptr);
int pthread_mutex_unlock(pthread_mutex_t *mptr);
条件变量:
#include <pthread.h> // 以下两个函数使用条件变量
// 若成功返回0,出错返回正的Exxx值
// cptr通常被初始化为PTHREAD_COND_INITIALIZE
int pthread_cond_signal(pthread_cond_t *cptr); // cptr指条件变量的类型 int pthread_cond_wait(pthread_cond_t *cptr, pthread_munex_t *mptr);
pthread_cond_wait必须放在pthread_mutex_lock和pthread_mutex_unlock之间,因为他要
根据共享变量的状态来觉得是否要等待,而为了不永远等待下去所以必须要在lock/unlock
队中
pthread_cond_signal通常唤醒等在相应条件变量上的单个进程
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值
int pthread_cond_broadcast(pthread_cond_t *cptr); // 唤醒在相应条件变量上的所有线程 int pthread_cond_timewait(pthread_cond_t *cptr, pthread_munex_t *mptr, // 允许线程设置一个阻塞时间限制
const struct timespec *abstime);
// abstime指的是绝对时间,而不是一个时间增量
// abstime通常调用gettimeofday获取当前时间,将其复制到timespec结构中,再加上期望的时间限制
线程相关函数(POSIX线程):的更多相关文章
- 通用线程:POSIX 线程详解,第 3 部分 条件互斥量(pthread_cond_t)
使用条件变量提高效率 本文是 POSIX 线程三部曲系列的最后一部分,Daniel 将详细讨论如何使用条件变量.条件变量是 POSIX 线程结构,可以让您在遇到某些条件时“唤醒”线程.可以将它们看作是 ...
- 通用线程:POSIX 线程详解,第 3 部分
通用线程:POSIX 线程详解,第 3 部分 使用条件变量提高效率 Daniel Robbins, 总裁兼 CEO, Gentoo Technologies, Inc. 简介: 本文是 POSIX 线 ...
- POSIX 线程详解 一种支持内存共享的简捷工具
线程是有趣的 了解如何正确运用线程是每一个优秀程序员必备的素质.线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而 ...
- POSIX 线程详解
一种支持内存共享的简捷工具 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程.其中还涉及大量幕后细节,读 ...
- Linux中-POSIX 线程详解
一种支持内存共享的简捷工具 摘自https://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/ 线程是有趣的 了解如何正确运用线 ...
- POSIX 线程详解(经典必看)
http://www.cnblogs.com/sunminmin/p/4479952.html 总共三部分: 第一部分:POSIX 线程详解 ...
- <基于Qt与POSIX线程>多线程下载器的简易搭建
原创博客,转载请联系博主! 本项目已托管到本人Git远程库:https://github.com/yue9944882/Snow 项目目标 Major Functionality 开发环境: Ce ...
- Linux posix线程库总结
由于历史原因,2.5.x以前的linux对pthreads没有提供内核级的支持,所以在linux上的pthreads实现只能采用n:1的方式,也称为库实现. 线程的实现,经历了如下发展阶段: Linu ...
- Posix线程编程指南(5) 杂项
在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self().pthread_equal()和pthread_once()三个,另外还有一个LinuxThr ...
随机推荐
- PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器
1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...
- 【12】link与@import的区别
[12]link与@import的区别 link是HTML方式, @import是CSS方式 link最大限度支持并行下载,@import过多嵌套导致串行下载,出现FOUC link可以通过rel=& ...
- websphere8.5 与cxf2.x冲突问题
一个客户was部署的小问题,记录一下. 问题现象 在我们的服务中用调用别人的webservice服务报错,框架用的cxf. 报错关键信息有: E com.ibm.ws.webcontainer.web ...
- c#笔记2018-12-26
using System; /*C#学习笔记2018-12-26 * 1.@逐字字符串 * 2.数据类型转换 * 3.变量声明和占位符使用 * 4.接收用户输入值 * 5.const 关键字 * 6. ...
- Linux 文件/文件夹重命名
mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为Bmv A B 例子:将/a目录移动到/b下,并重命名为cmv /a /b/c 其实在文本模式中要重命名文件或目录,只需要使用mv ...
- pytion3--文档字符串:__doc__
除了#注释外,Python也支持可自动附加在对象上的文档,而且在运行时还可保存查看.从语法上来说,这类注释是写成字符串,放在模块文档.函数以及类语句的顶端.就在任何可执行程序代码前(#注释在其前也没问 ...
- TOJ 2419: Ferry Loading II
2419: Ferry Loading II Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Subm ...
- 【JavaScript 11—应用总结】:下拉菜单
导读:在web页面的显示中,总是免不了下拉菜单的设置.怎样将菜单设置的更好玩一点呢?这次,就将实现一个下拉菜单的制作.当鼠标移入的时候,菜单显示,鼠标移走,菜单关闭. 一.实现分析 首先,制作一个下拉 ...
- BZOJ 4128 Matrix ——BSGS
矩阵的BSGS. 只需要哈希一下存起来就可以了. 也并不需要求逆. #include <map> #include <cmath> #include <cstdio> ...
- springmvc简单的xml文件配置步骤
1.配置web.xml的servlet标签,在此标签中配置服务器配置文件 2.配置web.xml的servlet-mapping标签 3.配置application.xml的自动扫描包的位置 4.配置 ...