由于 Linux 中没有专门为线程计划一个内核数据结构,所以内核中并没有很明确的线程的概念,而是用进程模仿的线程,只有轻量级进程的概念。这就注定了 Linux 中不会给我们直接提供线程的体系调用,只会给我们提供轻量级进程的体系调用!但是我们用户需要线程的接口,所以在用户和体系之间,Linux 开发者们给我们开发出来一个 pthread 线程库,这个库是在应用层的,它是对轻量级进程的接口举行了封装,为用户提供直接线程的接口!固然这个是第三方库,但是这个库是险些全部的 Linux 平台都是默认自带的!所以在 Linux 中编写多线程代码,需要利用第三方库 pthread 线程库!
(1)pthread_create()
接下来我们介绍 pthread 库中的第一个接口,创建一个线程:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
复制代码
此中第一个参数是一个输出型参数,一旦我们创建好线程,我们是需要线程 id 的,所以该参数就是把线程 id 带出来;第二个参数 attr 为线程的属性,我们不消关心,设为 nullptr 即可。
第三个参数是一个函数指针范例,也就是说我们需要传一个函数进去。当我们创建线程的时候,我们是想让实行流实行代码的一部门,那么我们就可以把该线程要实行入口函数地址传进去,线程一启动就会转而实行该指针指向的函数处!关于该函数指针的返回值和参数,都是 void*,由于 void* 可以吸取大概返回恣意指针范例,这样就可以支持泛型了。而第四个参数 arg 是一个输入型参数,当线程创建乐成,新线程回调线程函数的时候,假如需要参数,这个参数就是给线程函数传递的,也就是说该参数是给第三个参数函数指针中的参数传递的。