第二章 线程
来源:互联网 发布:网络交友的利与弊结尾 编辑:程序博客网 时间:2024/04/30 05:25
第二章 线程
1、建立和使用线程
1)线程标识符ID
表示线程,属于封装的pthread_t类型,保存在共享(静态或外部)变量,或者保存在堆空间的结构体中
2)线程函数
只有一个void *类型参数,并返回相同的类型值
3)创建线程
通过向pthread_create函数传送线程函数地址和线程函数调用的参数来创建线程,返回线程ID,并保存在thread参数中
4)使用线程
pthread_self获取自身的ID
pthread_equal比较两个线程ID
pthread_join获得线程的返回值,阻塞其调用者知道指定线程终止
pthread_exit来终止自己
pthread_detach分离线程不会对其他线程带来任何影响,没有被分离的线程终止时会保留其虚拟内存,包括堆栈和其他系统资源
初始线程(主线程)是特殊的
2、线程的生命周期
线程状态
线程状态切换
1)创建线程
①进程的初始线程随着进程的创建而创建
②其他线程通过显示的函数调用建立,函数pthread_create
线程创建后,处于就绪状态
线程创建和被调度执行不存在同步关系
2)线程启动
线程启动函数执行,参数也是在创建线程时指定
初始线程和普通线程的区别:
①main函数调用参数(argc和argv)与普通线程的启动参数(void *参数)
②普通线程从启动函数返回,线程终止而其他线程依然运行;初始进程从main函数返回,进程终止
③初始线程调用pthread_exit终止时,其他线程继续执行
④初始线程运行在默认进程堆栈上,普通线程堆栈会溢出
3)运行和阻塞
线程睡眠:被阻塞(某个资源不可用)和被抢占(系统将处理器分配给其他线程,如:时间片)
①就绪:刚被创建或者被解除阻塞在再次可以运行
②运行:某个其他线程被阻塞或者被时间片机制抢占,处理器保存被阻塞或抢占线程的环境并恢复就绪线程的环境
③阻塞:试图加锁一个已经被锁住的互斥量;等待某个条件变量;执行无法立即完成的I/O操作
4)终止
如果线程已经被分离,则进入下一环节——回收;否则,线程处于终止态,可以被其他线程调用pthread_join连接
僵线程:即使它们死了但还存在,可能会保留运行时的大部分资源,使用detachstate属性建立线程使其自动分离
终止后线程至少保留了线程ID和void *返回值
5)回收
使用detachstate属性建立线程,或者调用pthread_detach分离线程,则当线程结束时将被立即回收
回收:释放所有在线程终止时未释放的系统和进程资源,包括保存线程返回值的内存空间、堆栈、保存寄存器状态的内存空间
- 第二章 线程
- 第二十六章 线程
- 第二章 线程安全性
- 第二章 线程管理
- 线程第二章
- 第二章(基本线程管理)
- 第二章线程同步基础
- UNP第二十六章 线程
- 第二章 构建线程安全应用程序
- 第一篇,第二章 之 ExitThread() (结束一个线程)
- 第二章,一些基本的w32线程操作
- 《Java Concurrency in Practice》 学习笔记--第二章:线程安全
- 《Java并发变成实践》读书笔记---第二章 线程安全性
- 《Java并发编程实战》第二章 线程安全性 读书笔记
- [Java Concurrency in Practice]第二章 线程安全性
- UNP学习笔记(第二十六章 线程)
- UNIX网络编程卷一:第二十六章 线程
- 《现代操作系统》读书笔记——第二章 进程与线程
- 异常整体理解
- 金蝶中间件
- 上传下载资料
- 深圳外企
- ldap学习
- 第二章 线程
- 两道题会让你知道谁爱你
- java重排序理解
- 三星i9050手机贴膜
- 数据库索引
- 分布式文件系统hadoop
- 笔试面试有用题目积累
- varchar2和nvarchar等类型区别
- oracle集群配置