线程汇总:
1.#include<pthread.h>
线程头文件,链接出错是加上-lpthread,因为pthread不是Linux中默认的库。
2.pthread_t pthread_self()
返回自身的线程ID,C中输出可以指定格式%lu。
3.int pthread_create(pthread_t * restricttidp,const pthread_attr_t * restrict attr,void *(*start_rtn)(void *)),void *restrict arg)
若创建成功返回0,失败则返回错误编号。创建一个线程,通过指针传递线程ID传值给tidp,attr用于指定各种不同的线程属性,线程从函数指针start_rtn所指向的函数开始执行,该函数有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要将这些参数放到一个结构体中,然后把这个结构的地址作为arg的参数传入。一下三种代码传递方式。
代码一:
代码二:
4.void thread_exit(void *rval_ptr)
线程的退出,参数rval_ptr是一个无类型的指针
5.int pthread_join(pthread_t tid,void **rval_ptr)
调用该函数时会一直阻塞到对应的线程调用pthread_exit或者返回。如果指定线程简单的返回,那么rval_ptr简单的返回返回码,如果线程被取消,那么rval_ptr指向的内存单元被设置为PTHREAD_CANCELED。
大部分时候如果对线程的返回值不感兴趣,将rval_ptr设置为NULL。
6.int pthread_cancel(pthread_t tid);
调用该函数来取消同一进程中的其他线程。
线程与进程的一些函数对比
进程原语 | 线程原语 | 描述 |
Fork | Pthread_create | 创建新的控制流 |
exit | Pthread_exit | 退出 |
waitpid | pthread_join | 从控制流中得到退出状态 |
atexit | Pthread_cancel_push | 退出时该执行的函数 |
getpid | Pthread_self | 获取控制流ID |
abort | Pthread_cancel | 请求控制流非正常退出 |