【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/)
[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/)
相关文章推荐
- Linux入门基础 #2 GNOME的配置与基本操作
- 线程基础:线程(4)——JAVA中的基本线程操作(下)
- Java高并发程序-Chapter2 Java并行程序基础 (第五讲)线程的基本操作
- Linux基础(一)(4)文本文件及vim的基本操作
- (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作
- 线程基础:线程(4)——JAVA中的基本线程操作(下)
- Linux基础(3)-RHEL7基本命令操作
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
- 线程基础:线程(2)——JAVA中的基本线程操作(上)
- Linux入门基础 #5 Linux文件系统基本操作管理
- Linux 基础学习 基本概念及操作、常见命令
- Linux基础命令的操作(一)之基本操作
- 线程基础:线程(3)——JAVA中的基本线程操作(中)
- Linux入门基础 #1:命令行bash基本操作
- 线程基础:线程(2)——JAVA中的基本线程操作(上)
- <linux线程>POSIX无名信号量的基本操作---两个线程间的通信
- 线程基础:线程(2)——JAVA中的基本线程操作(上)
- 线程基础:线程(3)——JAVA中的基本线程操作(中)
- Linux基础(1):常见操作和基本命令
- 1.Linux基础操作:主题2 Shell的基本概念