linux多线程机制线程同步.docVIP

  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多线程机制线程同步.doc

linux多线程机制线程同步 1.引言   目前,许多流行的多任务操作系统都提供线程机制,线程就是程序中的 单个顺序控制流。利用多线程进行程序设计,就是将一个程序 进程 的任务划分为执行的多个部分 线程 ,每一个线程为一个顺序的单控制流,而所有线程都是并发执行的,这样,多线程程序就可以实现并行计算,高效利用多处理器。线程可分为用户级线程和内核级线 程两种基本类型。用户级线程不需要内核支持,可以在用户程序中实现,线程调度、同步与互斥都需要用户程序自己完成。内核级线程需要内核参与,由内核完成线 程调度并提供相应的系统调用,用户程序可以通过这些接口函数对线程进行一定的控制和管理。Linux操作系统提供了LinuxThreads库,它是符合POSIX1003.1c标准的内核级多线程函数库。在linuxthreads库中提供了一些多线程编程的关键函数,在多线程编程时应包括pthread.h文件。   2.LinuxThread中的关键库函数   2.1线程的创建和终止   int pthread_create pthread_t * pthread,const pthread_attr_t *attr,void * *start_routine *void ,void *arg ;调用此函数可以创建一个新的线程,新线程创建后执行start_routine 指定的程序。其中参数attr是用户希望创建线程的属性,当为NULL时表示以默认的属性创建线程。arg是向start_routine 传递的参数。当成功创建一个新的线程时,系统会自动为新线程分配一个线程ID号,并通过pthread 返回给调用者。   void pthread_exit void *value_ptr ;调用该函数可以退出线程,参数value_ptr是一个指向返回状态值的指针。   2.2线程控制函数   pthread_self void ;为了区分线程,在线程创建时系统为其分配一个唯一的ID号,由pthread_create 返回给调用者,也可以通过pthread_self 获取自己的线程ID。   Int pthread_join pthread- t thread , void * *status ;这个函数的作用是等待一个线程的结束。调用pthread_join 的线程将被挂起直到线程ID为参数thread 指定的线程终止。   int pthread_detach pthread_t pthread ;参数pthread代表的线程一旦终止,立即释放调该线程占有的所有资源。   2.3线程间的互斥   互斥量和临界区类似,只有拥有互斥量的线程才具有访问资源的权限, 由于互斥对象只有一个,这就决定了任何情况下共享资源(代码或变量)都不会被多个线程同时访问。使用互斥不仅能够在同一应用程序的不同线程中实现资源的安 全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。Linux中通过pthread_mutex_t来定义互斥体机制完成互斥操作。具体的操作函数如下   pthread_mutex_init pthread_mutex_t *mutex,const pthread_mutexattr_t *attr ;初使化一个互斥体变量mutex,参数attr表示按照attr属性创建互斥体变量mutex,如果参数attr为NULL,则以默认的方式创建。   pthread_mutex_lock pthread_mutex_t *mutex ;给一个互斥体变量上锁,如果mutex指定的互斥体已经被锁住,则调用线程将被阻塞直到拥有mutex的线程对mutex解锁为止。   Pthread_mutex_unlock pthread_mutex_t *mutex ;对参数mutex指定的互斥体变量解锁。   2.4线程间的同步   同步就是线程等待某一个事件的发生,当等待的事件发生时,被等待的线程和事件一起继续执行。如果等待的事件未到达则挂起。在linux操作系统中是通过条件变量来实现同步的。   Pthread_cond_init pthread_cond_t *cond,const pthread_cond_t *attr ;这个函数按参数attr指定的属性初使化一个条件变量cond。   Pthread_cond_wait pthread_cond_t *cond,pthread_mutex_t *mutex ;等待一个事件(条件变量)的发生,发出调用的线程自动阻塞,直到相应的条件变量被置1。等待状态的线程不占用CPU时间。   pthread_cond_signal pthread_cond_t *cond ;解除一个等待参数cond指定的条件变量的线

文档评论(0)

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

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

1亿VIP精品文档

相关文档