C++网络编程(三)
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