多核程序设计5(版本1).ppt

多核程序设计5(版本1).ppt

ID:49485309

大小:222.00 KB

页数:14页

时间:2020-02-05

多核程序设计5(版本1).ppt_第1页
多核程序设计5(版本1).ppt_第2页
多核程序设计5(版本1).ppt_第3页
多核程序设计5(版本1).ppt_第4页
多核程序设计5(版本1).ppt_第5页
资源描述:

《多核程序设计5(版本1).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、多核程序设计第五章Linux多线程编程2007年6月12日POSIX线程库Pthreads介绍IEEEPOSIX标准p1003.1c(Pthreads)定义了处理线程的一系列C语言类型的API。在Linux中,线程一般被认为是“轻量级的进程”。Linux创建进程所使用的函数是fork()或者vfork()。而对线程的创建和管理Linux可以使用POSIX的线程库pthreads提供的APIs。使用fork()创建进程和使用POSIX线程库差别:使用fork()创建进程的特点:代价昂贵,通常子进程需要拷贝父进程的整个上下文,比如数据等。进程间的通信方式比较复

2、杂,比如使用管道、消息、共享内存等方法。操作系统在实现进程间的切换比线程切换更费时。使用POSIXpthreads库创建线程的特点:线程可使用存在于进程中的资源,因此创建进程比创建线程更快。线程间的通信方式更容易,比如通过进程中的变量,可以让多个线程共享数据。操作系统对线程的切换比对进程的切换更容易和快速。POSIXpthreads库线程的创建pthreads线程库中提供的创建线程的函数是pthread_create()#includeintpthread_create(pthread_t*thread,pthread_attr_t*

3、attr,void*(*start_routine)(void*),void*arg);线程的退出在线程的处理函数中,可以显示的调用pthread_exit()结束线程执行,也可以不调用pthread_exit(),而只是让线程处理程序返回。除了pthread_exit()函数,可以让当前调用pthread_exit()的线程显示地退出外,线程也可以使用pthread_cancel()函数终止其他线程的执行。POSIXpthreads库(续)等待线程结束pthread_join()函数会挂起创建线程的线程的执行,直到等待到想要等待的子线程。intpthre

4、ad_join(pthread_tth,void**thread_return);线程的分离主线程创建子线程,且子线程本身自己有自我回收内存资源的能力。intpthread_detach(pthread_tth);获得当前线程标志使用pthread_self()函数可以获得当前线程的标志,pthread_self()的返回值就是当前线程的标志。pthread_tpthread_self(void);使用Pthreads编写的程序例子#include#include#include#include

5、thread.h>#defineTHREAD_NUMBER2intretval_hello1=2,retval_hello2=3;void*hello1(void*arg){char*hello_str=(char*)arg;sleep(1);printf("%s",hello_str);pthread_exit(&retval_hello1);}void*hello2(void*arg){char*hello_str=(char*)arg;sleep(2);printf("%s",hello_str);pthread_exit(&retval_h

6、ello2);}使用Pthreads编写的程序例子(续)intmain(intargc,char*argv[]){inti;intret_val;int*retval_hello[2];pthread_tpt[THREAD_NUMBER];constchar*arg[THREAD_NUMBER];arg[0]="helloworldfromthread1";arg[1]="helloworldfromthread2";printf("Begintocreatethreads...");ret_val=pthread_create(&pt[0],NULL

7、,hello1,(void*)arg[0]);if(ret_val!=0){printf("pthread_createerror!");exit(1);使用Pthreads编写的程序例子(续2)ret_val=pthread_create(&pt[1],NULL,hello2,(void*)arg[1]);if(ret_val!=0){printf("pthread_createerror!");exit(1);}printf("Now,themainthreadreturns.");printf("Begintowaitforthreads

8、...");for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。