- 线程复制执行二进制指令
- 多进程缺点: 创建进程占用资源多; 进程间通信需拷贝内存, 不能共享
- 线程相关操作
- pthread_exit(A), A 是线程退出的返回值
- pthread_attr_t 线程属性, 用辅助函数初始化并设置值; 用完需要销毁
- pthread_create 创建线程, 四个参数(线程对象, 属性, 运行函数, 运行参数)
- pthread_join 获取线程退出返回值, 多线程依赖 libpthread.so
- 一个线程退出, 会发送信号给 其他所有同进程的线程
- 线程中有三类数据
- 线程栈本地数据, 栈大小默认 8MB; 线程栈之间有保护间隔, 若误入会引发段错误
- 进程共享的全局数据
- 线程级别的全局变量(线程私有数据, pthread_key_create(key, destructer)); key 所有线程都可以访问, 可填入各自的值(同名不同值的全局变量)
- 数据保护
- Mutex(互斥), 初始化; lock(没抢到则阻塞)/trylock(没抢到则返回错误码); unlock; destroy
- 条件变量(通知), 收到通知, 还是要抢锁(由 wait 函数执行); 因此条件变量与互斥锁配合使用
- 互斥锁所谓条件变量的参数, wait 函数会自动解锁/加锁
- broadcast(通知); destroy
展开