1. 头文件
#include <pthread>
2. API
线程创建
/// 创建线程
///@arg
/// thread 创建后,TID 写入该指针指向的变量中
/// attr 线程属性存储
/// start_routine 线程实体函数
/// arg 传入线程实体函数内部
int pthread_create(
pthread_t *thread
, const pthread_attr_t *attr
, void *(*start_routine) (void *)
, void *arg);
线程退出
// 线程退出
// retval 线程退出后,子线程的主线程会得到数据
void pthread_exit(void *retval);
//主线程退出后,若子线程还在运行则主线程地址空间不会被释放
//直到线程全部结束,或被终结
线程回收
//thread 对应TID; retval为回收的数据
int pthread_join(pthread_t thread, void **retval);
//阻塞式函数
//线程退出,函数解除阻塞,回收子线程资源;
线程分离
//将子线程与母线程分离,子线程退出时,其占用资源即被释放
pthread_detach(pthread_t);
线程同步
互斥锁
// 定义互斥锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 锁定互斥锁
pthread_mutex_lock(&mutex);
// 解锁互斥锁
pthread_mutex_unlock(&mutex);
//销毁互斥锁
pthread_mutex_destroy(&mutex);
读写锁
//读锁允许多个线程持有;
//写锁排他,其他线程必须等待
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
//读取锁
pthread_rwlock_rdlock(&rwlock);
//释放读锁
pthread_rwlock_unlock(&rwlock);
//写入锁
pthread_rwlock_wrlock(&rwlock);
//释放写入锁
pthread_rwlock_unlock(&rwlock);