一起talk C栗子吧(第一百零八回:C语言实例--线程创建与结束一)
程序员文章站
2022-03-10 15:07:01
各位看官们,大家好,上一回中咱们说的是线程概述的例子,这一回咱们说的例子是:线程创建与结束。闲话休提,言归正转。让我们一起talk c栗子吧!
看官们,我们这一回介绍一下如何创建和结束线程。线程通...
各位看官们,大家好,上一回中咱们说的是线程概述的例子,这一回咱们说的例子是:线程创建与结束。闲话休提,言归正转。让我们一起talk c栗子吧!
看官们,我们这一回介绍一下如何创建和结束线程。线程通常是随着进程的创建而创建的,因为线程依赖于进程,进程创建成功后会创建线程来完成一些工作。比如我们在上一回中介绍的firefox进程,它在启动的时候创建了很多线程。
线程的结束通常由进程来控制,进程依据程序的需要来结束线程。不过有一点可以肯定的是:使用exit函数结束进程时,该进程创建的线程会随着进程的结束而结束。
我这么说,大家可能感觉比较抽象,接下来我们通过具体的例子来说明如何创建和结束线程。在介绍之前,我们先介绍三个与线程相关的函数:
1.pthread_create函数
delphi">int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
该函数用来创建线程,该函数有四个参数,接下来我们分别介绍它们:
第一个参数是pthread类型的指针,函数运行成功后,该指针指向新创建线程的标识符,我们可以通过操作线程的标识符来操作线程; 第二个参数是pthread_attr_t类型的指针,该指针指向包含有线程属性的变量,这些属性会赋值给新创建的线程。如果我们不想修改线程的属性,那么可以使用空指针; 第三个参数是一个函数指针,该指针指向的函数拥有一个参数,参数类型是void类型的指针,函数返回 void类型的指针。新线程创建成功后会执行该函数; 第四个参数是void类型的指针,该指针指向的变量被当作第三个参数中函数的参数; 该函数运行成功时返回零,否则返回相应的错误代码。2.pthread_exit函数
void pthread_exit(void *retval);
该函数用来结束线程,该函数只有一个参数。
参数为void类型的指针,该指针指向的变量包含有线程结束时的内容。它通常用来存放线程结束的状态。 该函数运行成功时返回零,否则返回相应的错误代码。3.pthread_join函数
int pthread_join(pthread_t thread, void **retval);
该函数用来等待线程结束,通常用来做简单的同步,它的作用类似于进程中的wait函数;
第一个参数是pthread_t类型的变量,它包含着线程的标识符,我们可以通过pthread_create函数的第一个参数来得到该变量的值; 第二个参数是一个二级指针,它指向pthread_exit函数的参数,因此,通常情况下我们用该指针来获取线程结束时的状态; 该函数运行成功时返回零,否则返回相应的错误代码。使用这三个函数的时候都需要包含 “pthread.h”头文件。另外,在我们使用的mint中该文件的位置如下:
/usr/include/pthread.h
大家可以打开看看里面的内容。比如该文件中pthread_create函数的原型如下:
extern int pthread_create (pthread_t *__restrict __newthread, const pthread_attr_t *__restrict __attr, void *(*__start_routine) (void *), void *__restrict __arg) __thrownl __nonnull ((1, 3));
该函数看着很复杂,其它和我们刚才介绍的一样,只不过是在函末尾多了个小尾巴而已。
各位看官,关于线程创建与结束的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
推荐阅读
-
一起talk C栗子吧(第一百八十四回:C语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百九十六回:C语言实例--DIY less命令五 )
-
一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)
-
一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)
-
一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
-
一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)
-
一起talk C栗子吧(第一百三十八回:C语言实例--文件操作:基于文件描述符一)
-
一起talk C栗子吧(第一百四十一回:C语言实例--文件操作:基于文件指针一)
-
一起talk C栗子吧(第一百四十二回:C语言实例--文件操作:基于文件指针二)
-
一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型二)