您的位置:首页 > 运维架构 > Linux

【Linux基础】线程基本操作

2013-06-18 11:11 399 查看
[align=left]在这里我们介始是Pthread线程库,它是由POSIX提供的一套通用的线程库,具有很好的移植性。Pthread线程库是一套用户级线程库,在linux上实现时,是使用了内核级线程来完成,目的是为了提高线程的并发性。[/align]
[align=left]线程创建和退出[/align]
[align=left]1.函数说明[/align]
[align=left]在linux中,创建线程所用的函数是pthread_create.而创建线程实际上就是确定调用该线程函数的入口点。线程退出有两种方法:一种是在线程被创建后,就开始运行相关的线程函数,在该函数运行完之后,该线程也就退出了;另一种是使用函数pthread_exit主动退出。在这里应注意到,线程退出使用函数pthread_exit,而进程退出是使用函数exit,当使用函数exit让进程终止时,进程中所有线程都会终止。上一章说到在进程之间用函数wait来同步终止和释放资源,而线程之间实现这样的机制是用函数pthread_join。函数pthread_join可用于将当前线程挂起,等待线程的结束。这个函数是一个线程阻塞函数,调用它的函数将一直到被等待的线程结束为止,当函数返回时,被等待线程的资源被回收。[/align]
[align=left]2.函数格式[/align]
[align=left](1)pthread_create 函数语法要点[/align]



01.jpg (74.92 KB, 下载次数: 0)

下载附件保存到相册设为封面

2013-6-6 15:00 上传



02.jpg (60.76 KB, 下载次数: 0)

下载附件保存到相册设为封面

2013-6-6 15:00 上传

[align=left]3.函数实例[/align]
[align=left]分别创建两个线程,当线程结束时调用pthread_exit函数退出,其一个线程在运行的过程中进行sleep。在主线程中收集这两个线程的退出信息,并释放资源。[/align]
[align=left]/*thread.c*/[/align]
[align=left]#include<stdio.h>[/align]
[align=left]#include<pthread.h>[/align]
[align=left]#include<stdlib.h>[/align]
[align=left]void thread1(void)[/align]
[align=left]{[/align]
[align=left]int i=0;[/align]
[align=left]while(i<3)[/align]
[align=left]{[/align]
[align=left]printf("i= %d in pthread1\n",i);[/align]
[align=left]i++;[/align]
[align=left]sleep(5);[/align]
[align=left]}[/align]
[align=left]pthread_exit(0);[/align]
[align=left]}[/align]
[align=left]void thread2(void)[/align]
[align=left]{[/align]
[align=left]int i=0;[/align]
[align=left]while(i<5)[/align]
[align=left]{[/align]
[align=left]printf("i= %d in pthread2\n",i);[/align]
[align=left]i++;[/align]
[align=left]}[/align]
[align=left]pthread_exit(0);[/align]
[align=left]}[/align]
[align=left]int main(void)[/align]
[align=left]{[/align]
[align=left]pthread_t thrd1,thrd2;[/align]
[align=left]int ret;[/align]
[align=left]ret=pthread_create(&thrd1,NULL,(void *)thread1,NULL);[/align]
[align=left]if(ret=0)[/align]
[align=left]{[/align]
[align=left]printf("create thread1 fail\n");[/align]
[align=left]exit(1);[/align]
[align=left]}[/align]
[align=left]ret=pthread_create(&thrd2,NULL,(void *)thread2,NULL);[/align]
[align=left]if(ret=0)[/align]
[align=left]{[/align]
[align=left]printf("create thread2 fail\n");[/align]
[align=left]exit(1);[/align]
[align=left]}[/align]
[align=left]pthread_join(thrd1,NULL);[/align]
[align=left]pthread_join(thrd2,NULL);[/align]
[align=left]exit(0);[/align]
[align=left]}[/align]
[align=left]运行结果为:[/align]
[align=left][root@localhost thread]# ./thread[/align]
[align=left]i= 0 in pthread1[/align]
[align=left]i= 0 in pthread2[/align]
[align=left]i= 1 in pthread2[/align]
[align=left]i= 2 in pthread2[/align]
[align=left]i= 3 in pthread2[/align]
[align=left]i= 4 in pthread2[/align]
[align=left]i= 1 in pthread1[/align]
[align=left]i= 2 in pthread1[/align]
[align=left] [/align]
本文转载于唯C教育,【Linux基础】线程基本操作

http://www.weicedu.com/forum.php?mod=viewthread&tid=119&fromuid=4

(出处: http://www.weicedu.com/)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: