线程从创建到退出到回收
首先,线程之间是共享资源的,而这份资源就叫做进程。
进程标识符PID,线程标识符tid(一个pthread_t类型变量),且它们的作用域范围不一样
在Linux终端编译时包含pthread库
gcc Pthread_Text1.c -lpthread
查看线程的tid
#include <pthread.h>
#include <stdio.h>
int main()
{
pthread_t tid = pthread_self(); //获取主线程的tid
//可以在此用printf输出tid
return 0;
}
创建线程
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main()
{
pthread_t tid1;
int ret = pthread_create(&tid1,NULL,fun,NULL);
if(ret != 0){
perror("pthread_create");
return -1;
}
/*tid_main 为通过pthread_self获取的线程ID,tid_new通过执行pthread_create成功后tid指向的空间*/
printf("tid_main = %lu tid_new = %lu \n",(unsigned long)pthread_self(),(unsigned long)tid1);
/*因线程执行顺序随机,不加sleep可能导致猪线程先执行,导致进程结束,无法执行到子线程*/
sleep(1);
return 0;
}
退出与回收线程
三种方法:
1.进程结束后所有线程会随之结束
2.pthread_exit由该线程主动结束
3,由其他线程调用pthread_cancel而结束
回收线程资源
pthread_join阻塞方式
pthread_tryjoin_np非阻塞方式
线程的控制
临界资源访问与线程的的执行顺序控制
互斥锁、信号量