- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于Linux多线程编程.doc
关于Linux多线程编程
Linux线程分为两类,一是核心级支持线程,在核心级实现线程时,线程的实现依赖于内核,无论是在用户进程中的线程还是系统进程中的线程,他们的创建、撤消、切换都由内核实现。核心只有单线程进程概念,而多线程进程由与应用程序连接的过程库实现。另一类线程是用户级线程,在Linux众多的线程库中,大部分实现的是用户级线程。
系统创建线程的顺序如下:当一个线程启动后,它会自动创建一个线程即主线程(main thread)或者初始化线程(initial thread),然后就利用pthread_initialize()初始化系统管理线程并且启动线程机制。
Linux线程编程基础
要创建一个多线程程序,必须加载pthread.h头文件。要掌握多线程编程常用的几个函数:
1、创建新线程函数: pthread_create()
2、挂起当前线程函数: pthread_join()
3、线程注册的清除处理函数:pthread_exit()
4、取消一个线程函数: pthread_cancel()
5、挂起当前线程,直到满足某种条件: pthread_cond_init
多线程的同步
1、互斥锁
互斥锁用来保证一段时间内只有一个线程在执行一段代码。当在同一内存空间运行多个线程时,为保证多个线程之间不相互破坏,要创建互斥量,如果一个线程已经锁定一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程被挂起(不占用任何CPU资源),直到第一个线程解除对这个互斥量的锁定为止。第二个线程将被唤醒并继续执行,同时锁定这个互斥量。
创建互斥量时,必须首先声明一个类型为pthread_mutex_t的变量,然后对其进行初始化,结构pthread_mutex_t为不公开的数据类型,其中包含一个系统分配的属性对象。函数pthread_mutex_init用来生成一个互斥锁。
锁定一个互斥量时使用函数pthread_mutex_lock(),它尝试锁定一个互斥量,如果该互斥量已经被其它线程锁定,该函数就把调用自己的线程挂起,一旦该互斥量解锁,它将恢复运行并锁定该互斥量。这个线程在做完它的事情后,必须释放这个互斥量,解除锁定时使用函数pthread_mutex_unlock()。
用完一个互斥量后必须销毁它,这时没有任何线程再需要它了,最后一个使用该互斥量的线程必须销毁它,销毁互斥量时使用函数pthread_mutex_destroy().
2、条件变量
互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。在某种情况下,例如,在图形用户界面程序中,一个线程读取用户输入,另一个线程处理图形输出,第三个线程发送请求到服务器并处理其响应,当服务器的响应到达时,处理服务器的线程必须可以通知画图形的线程,画图形的线程把相应的结果显示给用户。管理用户输入的线程必须总是能响应用户,例如,允许用户取消正在由处理服务器的线程执行的耗时的操作,这表明线程间必须可以互相传递信息,这时需要引入条件变量。
条件变量是一种可以使线程(不消耗CPU)等待某些事件发生的机制。某些线程可能守候着一个条件变量,直到某个其它的线程给这个条件变量发送一个信号,这时这些线程中的一个线程就会苏醒,处理这个事件。也有可能利用对条件变量的广播唤醒所有守侯着这个条件变量的线程。但条件变量不提供锁定,所以它必须与一个互斥量同时使用,提供访问这个环境变量时必要的锁定。
条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁,并等待条件发送变化。一旦其他的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥量,并重新测试条件是否满足。一般来说,条件变量被用来进行线程间的同步。
下面通过一个例子来介绍条件变量:
pthread_mutex_t count_mutex;
pthread_cond_t cont_nonzero;
unsigned int count;
decrement_count() {
pthread_mutex_lock (count_mutex);
while(count= =0)
pthread_cond_wait (count_nonzero, count_mutex);
count=count ?;
pthread_mutex_unlock (count_mutex);
}
increment_count(){
pthread_mutex_lock(count_mutex);
if(count= =0)
pthead_cond_sig
您可能关注的文档
最近下载
- 用友U8V15.0安装方法(WIN10X64_20H2)SQL2016SP2版.doc VIP
- 电子招标投标办法-电子招标投标办法.ppt VIP
- 调心球面滚子轴承径向游隙的测量.pdf VIP
- 黑布林阅读初三9《丢失的白象》中文版.pdf
- 西南交通大学824机械原理2023年考研真题及答案.docx VIP
- 高中数学新教材同步必修第二册 第9章课件-统计.ppt VIP
- 运动心理学第三章 运动活动的记忆过程.ppt VIP
- 《品牌设计》课件——IP形象设计案例.ppt VIP
- Q12SYBHZ2014-2019油井水泥用减阻剂磺化醛酮BZGF-1.pdf VIP
- 托人办事花钱协议书5篇.docx VIP
文档评论(0)