Step by StepLinux C多线程编程入门(基本API及多线程.pdf
《Step by StepLinux C多线程编程入门(基本API及多线程.pdf》由会员分享,可在线阅读,更多相关《Step by StepLinux C多线程编程入门(基本API及多线程.pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、介绍:什么是线程,线程的优点是什么介绍:什么是线程,线程的优点是什么线程在Unix系统下,通常被称为轻级的进程,线程虽然是进程,但却可以看作是Unix进程的表亲,同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈有各自的调用栈(callstack),自己的寄存器环境(,自己的寄存器环境(registercontext),自己的线程,自己的线程本地存储本地存储(threadlocalstorage)。一个进程可以有很多线程,每条线程并行执行同的任务。线
2、程可以提高应用程序在多核环境下处理诸如文件I/O或者socketI/O等会产生堵塞的情况的表现性能。在Unix系统中,一个进程包含很多东西,包括可执行程序以及一大堆的诸如文件描述符地址空间等资源。在很多情况下,完成相关任务的同代码间需要交换数据。如果采用多进程的方式,那么通信就需要在用户空间和内核空间进行频繁的切换,开销很大。但是如果使用多线程的方式,因为可以使用共享的全局变,所以线程间的通信(数据交换)变得非常高效。HelloWorld(线程创建、结束、等待)线程创建、结束、等待)创建线程创建线程pthread_create线程创建函数包含四个变,分别为:1.一个线程变名,被创建线程的标识2
3、.线程的属性指针,缺省为NULL即可3.被创建线程的程序代码4.程序代码的参数Forexample:pthread_tthrd1pthread_attr_tattrvoidthread_function(voidargument)char*some_argumentpthread_create(&thrd1,NULL,(void*)&thread_function,(void*)&some_argument);结束线程结束线程pthread_exit线程结束调用实例:pthread_exit(void*retval);/retval用于存放线程结束的退出状态线程等待线程等待pthread_jo
4、inpthread_create调用成功以后,新线程和线程谁先执行,谁后执行用户是知道的,这一块取决与操作系统对线程的调度,如果我们需要等待指定线程结束,需要使用pthread_join函数,这个函数实际上类似与多进程编程中的waitpid。举个例子,以下假设A线程调用pthread_join试图去操作B线程,该函数将A线程阻塞,直到B线程退出,当B线程退出以后,A线程会收集B线程的返回码。该函数包含两个参数:pthread_tth/th是要等待结束的线程的标识void*thread_return/指针thread_return指向的位置存放的是终止线程的返回状态。调用实例:pthread_j
5、oin(thrd1,NULL);example1:1 /*2 F i l e N a m e:t h r e a d _ h e l l o _ w o r l d.c 3 A u t h o r:c o u l d t t(f y b y)4 M a i l:f u y u n b i y i g m a i l.c o m 5 C r e a t e d T i m e:2 0 1 3 1 2 月1 4 日 星期六 1 1 时4 8 分5 0 秒 6 */7 8#i n c l u d e 9#i n c l u d e 1 0#i n c l u d e 1 1 1 2 v o i d
6、p r i n t _ m e s s a g e _ f u n c t i o n (v o i d *p t r)1 3 1 4 i n t m a i n()1 5 1 6 i n t t m p 1,t m p 2 1 7 v o i d *r e t v a l 1 8 p t h r e a d _ t t h r e a d 1,t h r e a d 2 1 9 c h a r *m e s s a g e 1 =t h r e a d 1 2 0 c h a r *m e s s a g e 2 =t h r e a d 2 2 1 2 2 i n t r e t _ t
7、h r d 1,r e t _ t h r d 2 2 3 2 4 r e t _ t h r d 1 =p t h r e a d _ c r e a t e(&t h r e a d 1,N U L L,(v o i d *)&p r i n t _ m e s s a g e _ f u n c t i o n,(v o i d*)m e s s a g e 1)2 5 r e t _ t h r d 2 =p t h r e a d _ c r e a t e(&t h r e a d 2,N U L L,(v o i d *)&p r i n t _ m e s s a g e _
8、f u n c t i o n,(v o i d*)m e s s a g e 2)2 6 2 7 /线程创建成功,返回0,失败返回失败号2 8 i f (r e t _ t h r d 1 !=0)2 9 p r i n t f(线程1 创建失败 n )3 0 e l s e 3 1 p r i n t f(线程1 创建成功 n )3 2 3 3 3 4 i f (r e t _ t h r d 2 !=0)3 5 p r i n t f(线程2 创建失败 n )3 6 e l s e 3 7 p r i n t f(线程2 创建成功 n )3 8 3 9 4 0 /同样,p t h r e
9、 a d _ j o i n 的返回值成功为04 1 t m p 1 =p t h r e a d _ j o i n(t h r e a d 1,&r e t v a l)4 2 p r i n t f(t h r e a d 1 r e t u r n v a l u e(r e t v a l)i s%d n ,(i n t)r e t v a l)4 3 p r i n t f(t h r e a d 1 r e t u r n v a l u e(t m p)i s%d n ,t m p 1)4 4 i f (t m p 1 !=0)4 5 p r i n t f(c a n n o
10、 t j o i n w i t h t h r e a d 1 n )4 6 4 7 p r i n t f(t h r e a d 1 e n d n )4 8 4 9 t m p 2 =p t h r e a d _ j o i n(t h r e a d 1,&r e t v a l)5 0 p r i n t f(t h r e a d 2 r e t u r n v a l u e(r e t v a l)i s%d n ,(i n t)r e t v a l)5 1 p r i n t f(t h r e a d 2 r e t u r n v a l u e(t m p)i s
11、%d n ,t m p 1)5 2 i f (t m p 2 !=0)5 3 p r i n t f(c a n n o t j o i n w i t h t h r e a d 2 n )5 4 5 5 p r i n t f(t h r e a d 2 e n d n )5 6 5 7 5 8 5 9 v o i d p r i n t _ m e s s a g e _ f u n c t i o n(v o i d *p t r )6 0 i n t i =0 6 1 f o r (i i F i l e N a m e:n o _ m u t e x.c 3 A u t h o r
12、:c o u l d t t(f y b y)4 M a i l:f u y u n b i y i g m a i l.c o m 5 C r e a t e d T i m e:2 0 1 3 1 2 月1 5 日 星期日 1 7 时5 2 分2 4 秒 6 */7 8#i n c l u d e 9#i n c l u d e 1 0#i n c l u d e 1 1 1 2 i n t s h a r e d i =0 1 3 v o i d i n c r e s e _ n u m(v o i d)1 4 1 5 i n t m a i n()1 6 i n t r e t 1
13、7 p t h r e a d _ t t h r d 1,t h r d 2,t h r d 3 1 8 1 9 r e t =p t h r e a d _ c r e a t e(&t h r d 1,N U L L,(v o i d *)i n c r e s e _ n u m,N U L L)2 0 r e t =p t h r e a d _ c r e a t e(&t h r d 2,N U L L,(v o i d *)i n c r e s e _ n u m,N U L L)2 1 r e t =p t h r e a d _ c r e a t e(&t h r d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Step by StepLinux C多线程编程入门基本API及多线程 多线程 编程 入门 基本 API
限制150内