进程 VS 线程

POSIX线程库
与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”开头,要使用这些函数库,要通过引入头文<pthread.h>,而且链接这些线程函数库时要使用编译器命令的“-lpthread”选项[Ubuntu系列系统需要添加的是”-pthread”选项而不是”-lpthread”]
1.pthread_create
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
创建一个新的线程
参数
thread:线程ID
attr:设置线程的属性,一般设置为NULL表示使用默认属性
start_routine:是个函数地址,线程启动后要执行的函数
arg:传给线程启动函数的参数
返回值:成功返回0;失败返回错误码;
错误检查
UNIX传统的函数:成功返回0,失败返回-1,并且对设置全局变量errno以指定错误类型。然而pthreads函数出错时不会设置全局变量errno(而其他的大部分POSIX函数会设置errno)。而是将错误代码通过返回值返回;
pthreads同样也提供了线程内的errno变量,对于每一个线程, 都有一个errno的值, 以支持其它使用errno的代码。对于pthreads函数的错误,建议通过返回值进行判定,因为读取返回值要比读取线程内的errno变量的开销更小!
2.pthread_exit
线程终止
value_ptr:指向该线程的返回值;注意:value_ptr不能指向一个局部变量。
3.pthread_join
等待线程结束
value_ptr:它指向一个指针,后者指向线程的返回值(用户获取线程的返回值)
在线程中同样存在僵尸线程,子线程退出,主线程没有pthread_join等待。将线程设置为脱离状态可以避免僵尸线程
4.pthread_self
返回线程ID
5.pthread_cancel
取消一个执行中的线程,由其他线程执行,属于线程的它杀
参数:
thread: 线程ID
返回值: 成功返回0, 失败返回错误码
6. pthread_detach 函数
将一个线程分离,避免僵尸线程
参数:
thread: 线程ID
返回值: 成功返回0, 失败返回错误码
参考
https://blog.csdn.net/Alatebloomer/article/details/81939991