进程 进程有独立的地址空间 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