多线程
认识线程
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
安装
Ubuntu默认是没有pthread库的,需要安装
$ sudo apt-get install -y glibc-doc manpages-posix-dev
测试代码实例演示
线程的创建
函数原型:
#include <pthread.h>
int pthread_create(
pthread_t *restrict tidp, //新创建的线程ID指向的内存单元。
const pthread_attr_t *restrict attr, //线程属性,默认为NULL
void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
);
运行程序:
这里使用pthread_create创建了五个进程并显示出来,之后又用pthread_exit来终止线程。
线程的终止
函数原型:
void pthread_exit(void*_retval)
线程的连接
函数原型:
int pthread_join(
pthread_t tid, //需要等待的线程,指定的线程必须位于当前的进程中,而且不得是分离线程
void **status //线程tid所执行的函数返回值(返回值地址需要保证有效),其中status可以为NULL
);
运行:
线程管理
线程的初始化:
int pthread_attr_init(pthread_attr_t *attr);
线程的销毁:
int pthread_attr_destroy(pthread_attr_t *attr);
互斥量、互斥锁
使用互斥量前要先初始化,也就是上面线程管理的内容。
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
对互斥量进行加锁和解锁的函数:
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);