5 个基本线程函数
pthread_create 函数
当一个程序启动时, 这个时候主线程也叫初始线程就创建了. 其余线程则有 pthread_create 函数创建.
- #include <pthread.h>
- int pthread_create(pthread_t *tid, const pthread_attr_t *attr,
- void *(*func)(void *),void *arg);
返回: 若成功则为 0, 若出错则为正的 Exxx 值
每个线程都有一个线程 id(thread ID) 标识, 如果新的线程创建成功, 其 ID 就通过 tid 指针返回.
然后我们来看下最后一个参数, 这个是线程执行的函数和参数, 该线程通过调用这个函数开始执行, 然后或者显式的终止 (通过调用 pthread_exit), 或者隐式的终止 (通过让该函数返回). 该函数的地址由 func 参数指定, 该函数的唯一调用参数是指针 arg. 如果我们需要传递多个参数, 我们就要把他们打包成一个结构, 传给这个参数.
pthread_join 函数
可以通过调用 pthread_join 函数等待一个给定线程终止.
- #include <pthread.h>
- int pthread_join(pthread_t *tid,void **status);
返回: 若成功则为 0, 若出错则为正的 Exxx 值
第一个参数 tid 就是需要等待的那个线程 id,status 这个参数如果非空, 那么来自所等待线程的返回值将存入由 status 指向的位置.
也就是说通过调用这个函数, 我们可以获取到该线程退出的状态的数据, 当然这个线程的状态必须是可汇合的 (joinable, 默认值)
什么意思呢? 就是说如果某个线程的状态是可汇合的 (joinable), 那么别的线程就可以通过 pthread_join 获取到该线程的退出状态和线程 id, 如果设置为脱离的 (detached), 那么当该线程终止时, 所有相关资源全部释放, 我们不能等待他们终止.
pthread_self 函数
每个线程都有一个在所属进程内标识自身的 ID, 线程 ID 由 pthread_create 返回, 我们在上面那个函数中也用到了, 每个线程可以使用 pthread_self 获取自身的线程 ID.
- #include <pthread.h>
- pthread_t pthread_self(void);
返回: 调用线程的线程 ID
pthread_detach 函数
在说 pthread_join 函数的时候我们提到过线程的状态, 一种是可汇合的 (joinable, 默认值), 一种是脱离的 (detached), 这个函数的作用就是把某个线程的状态变为脱离的 (detached).
- #include <pthread.h>
- int pthread_detach(pthread_t tid);
返回: 若成功则为 0, 若出错则为正的 Exxx 值
本函数通过由想让自己脱离的线程调用, 就如以下语句,
pthread_detach(pthread_self());
pthread_exit 函数
让一个线程终止的方法之一是调用 pthread_exit.
- #include <pthread.h>
- void pthread_exit(void *status);
不返回到调用者
如果本线程未曾脱离, 它的线程 ID 和退出状态将一直留存到调用进程内的某个其他线程对它调用 pthread_join.
来源: https://www.cnblogs.com/sjks/p/10922414.html