线程的优势
- 典型的UNIX进程可以看做一个线程,一个进程在某一时刻只做一件事,有了多个控制线程后就可以并行处理任务
- 多个进程间通信(IPC)要借助操作系统复杂的机制才能实现内存和文件描述符的共享
- 同过多个线程分解任务可以提高整个程序的性能
线程标识
pthread_t tid
数据类型来表示线程ID,实现的时候可以使用一个结构来代表,因此需要一个函数来对两个线程ID进行比较#include <pthread.h> int pthread_equals(pthread_t tid1, pthread_t tid2); 返回值:若相等,返回非0;否则返回0复制代码
用结构pthread_t 表示线程ID的后果是不能以一种可移植的方式打印线程id
#include<prhead.h>
pthread_t pthread_self(void);
返回值:调用线程的线程ID复制代码
线程控制原语
线程创建
在传统的UNIX进程模型中,每个进程只有一个控制线程,在POSIX线程的情况下,程序运行时也是以单个进程中的单个控制线程启动的,新的线程可以调用pthread_create
函数创建
#include <pthread.h>
int pthread_create(
pthread_t *restrict tid,
const pthread_attr_t *restrict attr,
void(*strart_rtn)(void *),
void *restrict arg
);
返回值:若成功,返回0;否则,返回错误编号复制代码
当pthread_create
调用成功时,新创建的线程ID会被设置成tid指向的内存位置.
attr用于控制线程的属性,可以传递NULL
,使用默认线程属性.
线程创建成功后,会从start_trn处开始运行,改函数的参数通过arg传递
线程创建时并不能保证哪个线程先运行