Linu多线程程序设计.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux多线程程序设计 华南理工大学 陈虎 博士 tommychen74@ Linux中的线程 Linux上的线程和进程都有独立的进程描述结构,只不过进程有独立的运行空间,而一个进程中的多个线程要共享同一个代码上下文。 线程在Linux环境里,被称为轻量级进程(Light Weight Process)。 pthread是实现POSIX线程标准的C函数调用和数据结构,提供接口的头文件(pthread.h)。它提供方面的函数调用进行线程的创建,退出,挂起等。 线程的ID号,创建 本线程的ID号可以通过pthread_self()函数获得。 pthread_t pthread_self(void); 调用此函数返回了当前线程的标示符,其数据类型为pthread_t,为Linux操作系统内部支持的特定数据类型。 线程创建 int pthread_create (pthread_t * thread, __const pthread_attr_t * attr, void *(*__start_routine) (void *), void *arg); thread:指向线程标识符的指针,创建线程的标识符将由操作系统写入到此结构中; attr:用来设置线程属性,如果为空指针(NULL),则表示采用缺省类型; start_routine:线程运行函数的起始地址; arg:指向运行函数参数的指针。 当创建线程成功时,函数返回0,若不为0 则说明创建线程失败,常见的错误返回代码为EAGAIN 和EINVAL。前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。创建线程成功后,新创建的线程运行start_routine函数,其输入参数由arg确定,原来的线程则继续运行下一行代码。 线程终止 void pthread_exit(void *retval); retval:指向线程返回参数的指针,此指针应该在线程退出后依然有效。 调用此线程后,当前线程将终止。如果调用pthread_cancel()函数则可以终止其它线程。 void pthread_cancel(pthread_t thread); pthread_t:需要终止的其它线程的标识符。 如果终止成功,函数返回0,否则返回一个非0的错误码。终止其它线程是否成功取决于被终止目标线程的状态,如果目标线程的状态是PTHREAD_CANCEL_ENABLE,则可以强制终止之;如果状态是PTHREAD_CANCEL_DISABLE,则终止请求将被挂起。 线程可以通过调用pthread_setcancelstate()函数调整当前状态。 int pthread_setcancelstate(int state, int *oldstate); state:希望进入的状态; oldstate:指向原始状态的指针。 如果状态转换成功,则返回0;否则返回一个非0的错误码。 线程挂起 int pthread_join(pthread_t thread,void **thread_return); thread: 等待此线程运行终止; thread_return:指向thread线程返回值的指针; 这个函数用来挂起当前线程,直到thread指定的线程终止运行为止。 线程同步 线程同步的方法很多,主要包括: 互斥锁 条件变量 信号量等。 互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexatr_t *attr); mutex: 指向互斥锁的指针; attr:指向互斥锁属性的指针,如果为空指针(NULL),则为缺省属性。 此函数将生成初始化一个互斥锁,该锁位于mutex指向的位置。如果调用成功则返回0,否则返回一个非0的错误代码。 int pthread_mutex_lock(pthread_mutex_t *mutex); mutex:锁数据结构的地址。 线程调用此函数后,将检查互斥锁mutex是否已经被上锁,如果已经上锁,则挂起本线程,否则将此互斥锁锁上。函数调用成功则返回0,否则返回一个非0的错误代码。 互斥锁 int pthread_mutex_unlock(pthread_mutex_t *mutex); 线程调用此函数后,将检查互斥锁mutex是否已经解锁,同时唤醒因等待此锁而挂起的线程。函数调用成功则返回0,否则返回一个非0的错误代码。 int pthread_mutex_trylock(pthread_mutex_t *mutex); mutex:锁数据结构的地址。 此函数与pthread_mutex_lock()功能比较类似,只是采用了非阻塞的方

文档评论(0)

asd3366 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档