POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。
Pthreads 定义了一套 C 语言的类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。
在 Linux 编译多线程程序的时候,要加上 -lpthread 选项,指定pthread库。在程序代码中包含线程头文件 pthread.h 。
数据类型
- pthread_t:线程ID
类型定义:
typedef unsigned long int pthread_t;
//come from /usr/include/bits/pthreadtypes.h
用途:pthread_t用于声明线程ID。
sizeof(pthread_t) =8
- pthread_attr_t:线程属性
typedef struct
{
int detachstate; 线程的分离状态
int schedpolicy; 线程调度策略
struct sched_param schedparam; 线程的调度参数
int inheritsched; 线程的继承性
int scope; 线程的作用域
size_t guardsize; 线程栈末尾的警戒缓冲区大小
int stackaddr_set;
void * stackaddr; 线程栈的位置
size_t stacksize; 线程栈的大小
}pthread_attr_t;
操纵函数
创建线程
创建一个线程,函数原型:
int pthread_create(
pthread_t *pthread_id,
const pthread_attr_t *attr,
void *(*start_rtn)(void *),
void *arg);
- pthread_t *pthread_id: 线程id,由系统自动填充。
- const pthread_attr_t *attr:线程属性,一般情况下为 NULL;
- void * (*start_rtn)(void*):线程执行的函数。该函数的返回值是void类型的指针,函数参数也是void类型的指针,注意:
这个函数也可以不传递参数, 比如:
void *create(void *args); //标准形式。
void *create(void); //这个也行。
- void *arg 线程执行函数的参数。
等待线程结束
阻塞当前的线程,直到另外一个线程运行结束,函数原型:
int pthread\_join(pthread_t pthread_id, void **args);
- pthread_t pthread_id:线程的id。
- void **args:线程返回的状态码。
终止当前线程
终止当前线程,函数原型:
void pthread_exit (void *retval);
- retval:函数的返回代码。
获取线程 ID 号
返回线程 id,这个 id 跟 pthread_creat 中的第一个参数的值一样,函数原型:
pthread_t pthread_self (void);
取消一个线程
中断另外一个线程的运行,函数原型:
int pthread_cancle(pthread_t thread);