Linux -- 线程
线程线程基本概念线程操作系统调度的最小单位是进程内的一条执行路径。一个进程可包含多个线程同一进程内线程共享资源地址空间、全局变量、堆、文件描述符每个线程独有栈、程序计数器、寄存器、上下文线程核心特点轻量级创建 / 销毁 / 切换开销远小于进程资源共享线程间直接访问共享数据通信极快独立调度可在多核 CPU 上真正并行稳定性弱一个线程崩溃 → 整个进程崩溃进程 vs 线程⭐对比项进程线程资源独立地址空间、独立资源共享进程地址空间与资源开销创建 / 切换 / 销毁开销大轻量开销小通信管道 / 共享内存 / 消息队列等直接读写共享变量稳定性进程间独立互不影响一个线程崩溃 → 进程崩溃调度单位以进程为单位以线程为单位线程核心 API头文件#include pthread.h编译必须加-lpthreadgcc 1.c -o 1 -lpthread1. 创建线程int pthread_create( pthread_t *thread, // 输出线程ID const pthread_attr_t *attr, // 线程属性填NULL void *(*start_routine)(void*), // 线程入口函数 void *arg // 传给线程的参数 );返回值成功 0失败 非 02. 等待线程结束阻塞int pthread_join( pthread_t thread, // 要等待的线程ID void **retval // 接收线程返回值 );作用主线程阻塞等待子线程结束再继续3. 线程退出void pthread_exit(void *retval);retval线程返回值必须是全局 / 堆内存不能是局部变量线程生命周期⭐主线程如果不调用 pthread_join就先退出会导致整个进程终止子线程被强制杀死。正确流程主线程创建子线程 → pthread_join 等待 → 主线程再退出经典示例线程计算 1~10 累加#include stdio.h #include stdlib.h #include pthread.h int num 0; // 全局变量线程间共享 void* fun(void* arg) { for (int i 0; i 10; i) { num i; } pthread_exit(num); // 返回全局变量地址 } int main() { pthread_t id; pthread_create(id, NULL, fun, NULL); printf(main running...\n); int* s NULL; pthread_join(id, (void**)s); // 等待线程结束并接收返回值 printf(result %d\n, *s); // 输出 55 return 0; }进程 资源容器线程 执行单元线程更轻、更快、共享资源但稳定性更弱需同步控制。