Linux 第10章 线程控制概要1.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 第10章 线程控制概要1

另一个用来阻塞线程的函数是pthread_cond_timedwait(),它的原型为: int pthread_cond_timedwait (pthread_cond_t * cond,pthread_mutex_t *mutex, const struct timespec *abstime); 它比函数pthread_cond_wait()多了一个时间参数,经历abstime段时间后,即使条件变量不满足,阻塞也被解除。 线程可以被函数pthread_cond_signal()和函数pthread_cond_broadcast()唤醒,但是要注意的是,条件变量只是起阻塞和唤醒线程的作用,具体的判断条件还需用户给出。线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,一般说来线程应该仍阻塞在这里,被等待被下一次唤醒。这个过程一般用while语句实现。函数pthread_cond_signal()的原型为: int pthread_cond_signal (pthread_cond_t *cond); 它用来释放被阻塞在条件变量cond上的一个线程。多个线程阻塞在此条件变量上时,哪一个线程被唤醒是由线程的调度策略所决定的。 函数pthread_cond_broadcast()激活所有等待线程,其函数原型为: int pthread_cond_broadcast(pthread_cond_t *cond); 当一个条件变量不再使用时,需要将其清除,清除一个条件变量使用函数pthread_cond_destroy()来实现,其函数原型为: int pthread_cond_destroy(pthread_cond_t*cond); 【例10-4】条件变量。 设计步骤 [1] 在Vim中创建一个新工程文件,命名为“example10_4.c”。 [2] 在“example10_4.c”中创建代码如下所示。 #include stdlib.h #include stdio.h #include pthread.h #include sched.h pthread_mutex_t count_lock; pthread_cond_t count_nonzero; unsigned count; decrement_count() { printf (Create decrement_count pthread success!\n); pthread_mutex_lock (count_lock); while(count==0) pthread_cond_wait( count_nonzero, count_lock); count=count -1; printf (Count is decrement: count=%d\n,count); pthread_mutex_unlock (count_lock); } increment_count(){ printf (Create increment_count pthread success!\n); pthread_mutex_lock(count_lock); if(count==0) pthread_cond_signal(count_nonzero); count=count+1; printf (Count is increment: count=%d\n,count); pthread_mutex_unlock(count_lock); } int main() { pthread_t id; int i,ret; ret=pthread_create(id,NULL,(void *)decrement_count,NULL); if(ret!=0){ printf (Create decrement_count pthread error!\n); exit (1); } ret=pthread_create(id,NULL,(void *) increment_count,NULL); if(ret!=0){ printf (Create increment_count pthread error!\n); exit (1); } } 用GCC编译运行程序结果如图10-4所示。 图10-4条件变量例10-4的运行结果 1965 年,E.W.Dijkstra提出了信号量的概念,之后信号量成为操作系统实现互斥和同步的一种普遍机制。信号量是一种特殊的变量,只能取正整数值,对这些正整数只能采取两种操作,P操作(代表等待、关操作)、V操作(代表信号、开操作)。定义如下: P(sem):如果sem的值大于0,则sem减1,如果sem的值为0,则

文档评论(0)

676200 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档