- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5UNIXLinux操作系统编程线程
线程编程
2017年6月4日
2
“线程”基本概念
线程是进程内的独立执行实体和调度单元,又称为“轻量级”进程(lightwight process);创建线程比进程快10~100倍。一个进程内的所有线程共享相同的全局内存、全局变量等信息(这种机制又带来了同步问题)。它们共享以下信息:
共享信息 私有信息
进程指令 线程ID
大多数数据 寄存器集合(包括PC和栈指针)
打开的文件字 栈(用于存放局部变量)
信号处理程序和信号处置 error
当前工作目录 信号掩码
用户ID和组ID 优先级
2017年6月4日
3
线程调用函数(1)
#include pthread.h
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *), void *arg);
返回:成功时为0;出错时为正的Exxx值
当一个程序由exec启动时,系统会创建一个初始线程或主线程的单个线程。额外线程由上述函数创建;
新线程由线程id标识:tid,新线程的属性attr包括:优先级、初始栈大小、是否应该是守护线程等等。线程的执行函数和调用参数分别是:func和arg,该函数必须是一个静态函数;
由于线程的执行函数的参数和返回值类型均为void *,因此可传递和返回指向任何类型的指针;
2017年6月4日
4
线程函数调用(3)
#include pthread.h
void pthread_exit(void *status);
不返回调用者;
如果线程为可汇合的,将保留线程id和退出状态供pthread_join;
指针status不能指向局部于调用线程的对象,因为线程终止时这些对象也将消失;
还有其他两种方法可使线程终止
启动线程的函数(pthread_create的第3个参数)返回。既然该函数必须说明为返回一个void指针,该返回值便是线程的终止状态;
如果进程的main函数返回,或者任何线程调用了exit,进程将终止,线程也将随之终止。
2017年6月4日
5
线程接口
线程编程接口
功能
pthread_cancel
terminate another thread
pthread_create
create a thread
pthread_detach
set thread to release resources
pthread_equal
test two thread IDs for equality
pthread_exit
exit a thread without exiting process
pthread_kill
send a signal to a thread
pthread_join
wait for a thread
pthread_self
find out own thread ID
2017年6月4日
6
互斥量
可以通过使用pthread的互斥接口保护数据,确保同一时间里只有一个线程访问数据
互斥量mutex,本质上就是一把锁
在访问共享资源前,对互斥量进行加锁
在访问完成后释放互斥量上的锁
对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞,直到锁被释放
2017年6月4日
7
互斥量的初始化
互斥量在使用前,必须要对互斥量进行初始化
函数原型
#includepthread.h
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr);
参数与返回值
mutex:即互斥量,类型是pthread_mutex_t
注意:mutex必须指向有效的内存区域
2017年6月4日
8
互斥量的初始化
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr);
参数与返回值
attr:设置互斥量的属性,通常可采用默认属性,即可将attr设为NULL。后面再讨论互斥量的属性
成功返回0,出错返回错误码
2017年6月4日
9
互斥量的销毁
互斥量在使用完毕后,必须要对互斥量进行销毁,以释放资源
函数原型
#includepthread.h
int pthread_mutex_destroy(
pthread_mutex_t *mutex);
参数与返回值
mutex
您可能关注的文档
- 2015高考地理大二轮总复习精选高考倒计时2天.pptx
- 2015高考英语(人教版)大一轮复习课件选修六Unit3Ahealthylife(96张).pptx
- 2015高考英语(人教版)一轮课件选修6Units1-2.pptx
- 2016届一轮复习历史综合归纳4.pptx
- 2015高考语文(全国通用)总复习课件《让你的作文“靓”起来》(共27张).pptx
- 2015高考英语(人教版)大一轮复习课件选修六Unit4Globalwarming(89张).pptx
- 2016年中考思想品德(重庆版)热点专题突破专题1十八届五中全会(共79张).pptx
- 2016年北京市春季会考考前复习经济文化模块.pptx
- 2016《初级会计实务》第一章复习资料考试习题第12节.pptx
- 2016重庆中考政治复习配套课件第一篇考点2依法治国宪法意识权利义务.pptx
文档评论(0)