没啥用的主页
学习杂记
C++网络编程(三)
Jan 21 2023

Pthread

在linux下,进程的创建是用的fork函数,他会将我们的数据给完整的复制一份过去,由我们创建出来的进程也被称之为子进程,而linux下的线程则跟进程的差别不大,线程会共享程序的各种资源,而进程是复制一份,因此后面的知识点也适用于进程的情况。

创建

我们利用函数 pthread_create函数来创建一个线程。他的原型如下

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

pthread_t *thread 用于缓存新线程的 pid,即我们的线程id,是一个唯一值

const pthread_attr_t *attr 制定新线程的 attr ,如果为 NULL,那么将使用默认的 attr。该参数用于控制我们的线程属性。

start_routine 是新线程即将进入的执行函数。需要注意的是该函数的返回值必须为 void,且参数也得为void

arg 向新线程执行的函数传递的参数

利用上面的函数我们就可以创建出一个线程了。成功的时候会返回0,失败则会返回错误码。

控制

多个线程的情况下必然会出现运行顺序不如意的情况,我们可以通过pthread_join函数来简单的控制线程的阻塞。

int pthread_join(pthread_t thread, void **retval);

thread 是某个线程的 pid .即我们执行的线程需要等待的线程的id

retval 用于获取线程 start_routine 的返回值.

定制参数(attr)

互斥量(mutex)

线程池(threadpool)

在Linux高性能服务器编程中,他提供的线程池逻辑如下
1.实例化threadpool

高性能模式