![](https://csdnimg.cn/release/download_crawler_static/4549377/bg4.jpg)
pthread_t pthread_self (void);
int pthread_detach (pthread_t tid);
void pthread_exit (void *status);
pthread_create 用于创建一个线程,成功返回 0,否则返回 Exxx(为正数)。
•
pthread_t *tid:线程 id 的类型为 pthread_t,通常为无符号整型,当调用
pthread_create 成功时,通过*tid 指针返回。
•
const pthread_attr_t *attr:指定创建线程的属性,如线程优先级、初始栈大小、是
否为守护进程等。可以使用 NULL 来使用默认值,通常情况下我们都是使用默认值。
•
void *(*func) (void *):函数指针 func,指定当新的线程创建之后,将执行的函数。
•
void *arg:线程将执行的函数的参数。如果想传递多个参数,请将它们封装在一个
结构体中。
pthread_join 用于等待某个线程退出,成功返回 0,否则返回 Exxx(为正数)。
•
pthread_t tid:指定要等待的线程 ID
•
void ** status:如果不为 NULL,那么线程的返回值存储在 status 指向的空间中(这
就是为什么 status 是二级指针的原因!这种才参数也称为“值-结果”参数)。
pthread_self 用于返回当前线程的 ID。
pthread_detach 用于是指定线程变为分离
分离分离
分离状态,就像进程脱离终端而变为后台进程类似。
成功返回 0,否则返回 Exxx(为正数)。变为分离状态的线程,如果线程退出,它的所有
资源将全部释放。而如果不是分离状态,线程必须保留它的线程 ID,退出状态直到其它线
程对它调用了 pthread_join。
进程也是类似,这也是当我们打开进程管理器的时候,发现有很多僵死进程的原因!也是为
什么一定要有僵死这个进程状态。
pthread_exit 用于终止线程,可以指定返回值,以便其他线程通过 pthread_join 函数获取该
线程的返回值。
•
void *status:指针线程终止的返回值。
知道了这些函数之后,我们试图来完成本文一开始的问题:
1)有一 int 型全局变量 g_Flag 初始值为 0;