【Linux】线程的创建、终止、等待、分离

操作系统并没有提供线程操作的系统调用接口,我们需要明确的是操作线程的接口都是库函数。因此在操作线程时需要添加头文件 #include<pthread.h>

  • 线程的创建

int pthread_create(pthread_t * tid,pthread_attr_t * attr,void * (* start_routine)(viod *),void * arg);
tid是用于获取创建的线程id
attr是线程属性,通常置NULL
start_routine是线程入口函数
arg是通过线程入口函数给线程传递的参数
成功返回0,失败返回非0。
注意:在编译和链接时要指定函数库 -pthread / -lpthread

  • 线程的终止

线程的终止,也就是退出线程的方式,共有三种:
1.线程入口函数中执行return(线程入口函数运行完毕,线程就会退出);
2.使用库函数 pthread_exit(void * retal); retal作为线程的返回值。在任意位置调用,哪个线程调用,就会退出哪个线程;
3.使用库函数 int pthread_cancel(pthread_t tid); tid为一个指定线程的id,指定哪个线程就退出哪个线程。
注意:主线程退出后不会导致进程退出(进程资源被释放),只有所有线程退出了,进程才会退出)

  • 线程等待
    线程默认情况下,退出后资源也不会被回收,需要被其他线程等待,获取退出线程的返回值,释放资源。
    阻塞接口:pthread_join(pthread_t tid,void ** retal);
    线程不是必须被等待的,在线程属性中,有一个分离属性joinable,处于joinable状态的线程退出后不会自动释放资源,需要被等待。
  • 线程的分离
    设置线程的分离属性为detach属性,处于detach属性的线程,退出后自动释放资源,不需要被等待,一般用于不关心线程返回值也不想等待线程退出时使用。
    int pthread_detach(pthread_t tid);
    特别用法:pthread_detach(pthread_self());自己分离自己
    pthread_self()用于获取自身线程id

猜你喜欢

转载自blog.csdn.net/weixin_45177279/article/details/115101019