Linux系统程序设计教程-第8章线程

上传人:大米 文档编号:568659920 上传时间:2024-07-25 格式:PPT 页数:24 大小:380.50KB
返回 下载 相关 举报
Linux系统程序设计教程-第8章线程_第1页
第1页 / 共24页
Linux系统程序设计教程-第8章线程_第2页
第2页 / 共24页
Linux系统程序设计教程-第8章线程_第3页
第3页 / 共24页
Linux系统程序设计教程-第8章线程_第4页
第4页 / 共24页
Linux系统程序设计教程-第8章线程_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Linux系统程序设计教程-第8章线程》由会员分享,可在线阅读,更多相关《Linux系统程序设计教程-第8章线程(24页珍藏版)》请在金锄头文库上搜索。

1、Linux程序设计教程第8章线程2第8章 线程n8.1线程概念n8.2线程基本操作n8.3线程间通信n8.4案例8:线程实例n一个程序如何才能同时(宏观)完成多个任务?使用fork和exec同时运行多个程序。使用线程在同一个程序中同时运行多个程序。n一个进程至少包括一个线程,还可以创建其他线程,各个线程之间平等,通常称原来的线程为主线程。38.1线程概念线程与进程n进程是资源分配的最小单位,而线程是计算机中独立运行、CPU调度的最小单元n同一进程中的线程共享整个进程空间。n例如:flashget软件n练习:单线程程序和多线程程序比较4线程与进程的对比5多进程还是多线程?n关键问题创建进程比创建

2、线程时空开销大多进程间通信开销大,多线程间通信开销小,但是线程太多也容易导致其他同步的问题。进程稳定性比线程好n一个进程出问题,其它进程不受影响;一个线程出问题,其他线程容易受影响。n简单总结节约资源,速度快,选择多线程。稳定性好,选择多进程。6进程/线程相关函数对比应用功能线程进程创建pthread_createfork,vfork退出pthread_exitexit等待pthread_joinwait、waitpid取消/终止pthread_cancelabort读取IDpthread_self()getpid()通信机制信号量、信号、互斥锁、条件变量、读写锁无名管道、有名管道、信号、消息

3、队列、信号量、共享内存7线程相关函数#includen创建线程:pthread_create(掌握)n线程等待:pthread_join(掌握)n结束当前线程:pthread_exit(理解)n取消一个线程:pthread_cancel(理解)n获取线程id:pthread_self(理解)n编程序时加pthread.h头文件,gcc编译时加上-lpthread选项。898.2线程基本操作n创建线程n线程退出与等待n取消线程10线程的创建npthread函数intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*st

4、art_routine)(void*),void*arg);n参数:thread:指向线程标识符的指针,attr:设置线程属性,可设为NULL表示默认属性start_routine:线程运行函数的起始地址,注意原型arg:传给运行函数的参数,不传则设为NULL,若传多个用结构体“打包”。n返回值:成功返回0,失败返回errno,不置errno。线程的创建举例void*function(void*arg)/线程运行函数操作mainpthread_ttid;intret;ret=pthread_create(&tid,NULL,function,NULL);if(ret!=0)printf(Cre

5、atepthreaderror!n);return1;pthread_join(tid,NULL);/等待线程tid结束练习:线程使用举例.c注意运行函数的参数和返回值的类型!128.2线程基本操作n创建线程n线程退出与等待n取消线程13线程结束方式n正常结束n中途退出pthread_exitn被其他线程强制退出pthread_cancel14退出当前线程n线程可隐式退出(执行函数结束),也可显式调用pthread_exit()voidpthread_exit(void*value_ptr);参数:指向返回状态的指针,可置为NULL。n线程内调用pthread_exit与exit的区别pthr

6、ead_exit结束当前线程exit结束当前进程,当前进程内的其他线程也被结束15线程等待的原因n有时一个线程为了等待某个线程执行结束,需要使用pthread_join挂起当前线程等待另一个线程结束。n默认线程(可联合)退出后资源不主动释放,需要调用pthread_join等待并释放资源。16pthread_joinnintpthread_join(pthread_tth,void*thread_return);参数nth:被等待的线程标识符,nthread_return:自定义指针,存储被等待线程的返回值。通常不使用,直接置为NULL即可。返回值:成功返回0,错误返回-1(置errno)17

7、void*function(void*arg)/线程运行函数操作mainpthread_ttidintret;ret=pthread_create(&tid,NULL,function,NULL);/其他操作pthread_join(tid,NULL);/等待线程tid结束/继续其他操作线程等待举例188.2线程基本操作n创建线程n线程退出与等待n取消线程线程的取消n前面介绍过线程的终止可能由于被其他线程调用pthread_cancel取消。n线程有是否可被取消的属性,默认是可被取消的。1920取消指定线程n一个线程可以使用pthread_cancel取消另一个线程intpthread_can

8、cel(pthread_tthread_id);参数:被取消线程的id返回值:成功返回0,否则返回errno。n若要取消一个线程首先必须知道该线程id,可将要被取消的线程id设为全局变量n如何获取线程的id在pthread_create时返回给调用者在线程中调用pthread_self系统调用pthread_tpthread_self(void);8.3线程间通信npthread_mutex_initnpthread_mutex_destroynpthtead_mutex_locknpthread_mutex_unlocknpthread_mutex_trylockn练习:互斥锁21228.4案例8:线程实例n“读者-写者”问题描述:有100个读线程(reader)和100个写线程(writer)共同读、写文件。n要求:允许多个reader同时读一个文件;当有一个reader在读文件时,不允许writer写文件;当有一个writer在写文件时,不允许reader读文件,也不允许其它writer写文件;238.4案例8:线程实例n见教材。谢谢!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号