Linux-进程线程剖析.ppt

  1. 1、本文档共150页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux-进程线程剖析

Linux的线程实现方式 Linux2.0~2.4实现的是“LinuxThreads”的多线程方式,到了2.6,基本上都是NPTL的方式 Linux 2.6以前, 用LWP的实现方式:即通过轻量级进程来模拟线程,内核并不知道有线程这个概念,在内核看来,都是进程。一个LWP对应一个线程,内核调度。 这种方法很多地方没有遵循POSIX标准 对LinuxThreads的改进:IBM启动的NGTP(Next Generation POSIX Threads)项目(在2003年放弃),以及Redhat公司的NPTL(Native POSIX Thread Library) NPTL:符合POSIX模式,也是“一对一模型”,应该在具有很多处理器的系统上也能很好地工作(并不是很完善,有改进空间,如稳定性和m:n模型等) getconf GNU_LIBPTHREAD_VERSION :查看 School of Computer Sicence 线程示例 多进程:多个程序同时运行 多线程:一个程序,“多个函数”同时运行 #include pthread.h #include stdio.h void *create(void *arg){ printf(new thread created ...\n); } int main(int argc,char *argv[]) { pthread_t tidp; int error; error=pthread_create( tidp ,NULL, create, NULL); printf(pthread_create is created...\n); } School of Computer Sicence 线程创建 helloThread.c pthread_create posix thread create 编译的问题 #include pthread.h #include stdio.h void *create(void *arg){ printf(new thread created ...\n); } int main(int argc,char *argv[]) { pthread_t tidp; int error; error=pthread_create( tidp ,NULL, create, NULL); if(error !=0){ printf(pthread_create is not created...); return -1; } printf(pthread_create is created...\n); } gcc -o ht helloThread.c –lpthread pthread库不是Linux系统库,需指明lib文件 (或-pthread) School of Computer Sicence 线程创建函数 函数原型 int?pthread_create(pthread_t* thread, const?pthread_attr_t?*attr,void*(*start_rtn) (void*),void?*?arg); 参数说明 thread: 待创建线程的id地址(指针)类型为pthread_t(长整型) attr: 创建线程时的线程属性(暂时可忽略,NULL) void* (*start_rtin)(void*): 返回值是void*类型的指针函数,即线程体,其参数类型为void*,即函数形式为:void * fun (void *) arg: 传递给线程函数的参数 返回值 成功返回0 失败返回错误编号 School of Computer Sicence “父子”线程的关系 进程:父进程结束,子进程会结束么? 线程:“父线程”结束,“子线程会结束么? 进程结束,线程会结束么? 编写程序验证你的答案 程序中可以用 sleep(x)来控制结束顺序 School of Computer Sicence 线程的终止 按POSIX说法,线程没有“父子”关系,线程创建后地位是平等的 线程也要占用资源(自己的栈),线程结束后需要释放资源 线程能无限制的创建么? 线程结束后资源会释放么? 用程序验证 School of Computer Sicence 能创建多少线程? 创建线程,直到不能创建为止 线程结束后如果能释放资源,那么就可以无穷尽的创建下去 threadTermin.c #includepthread.h #includestdio.h void* run(void* arg) { // pthread_exit(0);

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档