线程概念(linux进程与线程学习笔记)

    科技2022-08-03  95

     进程       进程有独立的地址空间          linux为每个进程创建task_struct          每个进程都参与内核调度,互不影响       线程       进程在切换时系统开销大          很多操作系统引入了轻量级进程LWP          同一个进程中的线程共享相同地址空间          linux不区分进程、线程       线程特点       通常线程指的是共享相同地址空间的多个任务          使用多线程的好处              大大提高了任务切换的效率                  避免了额外的TLB & cache的刷新           线程共享资源       一个进程中的多个线程共享以下资源              可执行的指令                  静态数据                  进程中打开的文件描述符                  当前工作目录                  用户ID                  用户组ID           线程私有资源       每个线程私有的资源包括              线程ID(TID)                  PC(程序计数器)和相关寄存器                  堆栈                  错误号(error)                  优先级                  执行状态和属性           Linux线程库       pthread线程中提供了如下基本操作              创建线程                  回收线程                  结束线程              同步和互斥机制              信号量                  互斥锁           线程创建 - pthread_create       #include<pthread.h>          int pthread_create(pthread_t *thread,const                          线程对象     pthread_attr_t *attr,void *(*routine)(void *),void *arg);      线程属性              线程要执行的函数        传递给线性执行函数的参数          成功返回0,失败返回错误码          thread线程对象          attr线程属性,NULL代表默认属性          routine线程执行的函数          arg传递给routine的参数       线程回收 - pthread_join       #include<pthread.h>          int pthread_join(pthread_t thread,void **retval);          成功返回0,失败返回错误码          thread要回收的线程对象          调用线程阻塞直到thread结束          *retval接收线程thread的返回值       线程结束 - pthread_exit       #include<pthread.h>          void pthread_exit(void *retval);          结束当前线程          retval可被其他线程通过pthread_join获取          线程私有资源被释放          编译指令              gcc -o test test.c -lpthread

    Processed: 0.009, SQL: 8