POSIX 线程:mutex 与条件变量
更新时间:2026-10-01。原子解决单变量,复杂协作要用锁和条件变量。
一、创建与互斥
pthread_create 传参注意生命周期(别传栈变量地址);共享可变状态必须用 mutex 串行化,临界区尽量短;用 pthread_join 回收,避免资源泄漏。
二、条件变量模式
pthread_cond_wait 会原子释放锁并睡眠,被唤醒时重新持锁;因虚假唤醒,等待必须放在 while(谓词不成立) 循环里。标准生产者-消费者:

三、常见坑
- wait 前/后锁状态搞错。
- 用 if 不等谓词。
- signal 早于 wait 造成丢失唤醒。
- 忘记 -pthread 链接。
小结
总结
pthread 用 pthread_create 建线程(传参别给栈变量地址)、pthread_join 回收(编译要 -pthread),共享可变状态必须用互斥锁串行化且临界区尽量短;条件变量配合互斥锁做高效等待/通知——pthread_cond_wait 会原子地释放锁并睡眠、被唤醒再重新持锁,由于存在虚假唤醒,等待必须放进 while(谓词不成立) 循环里,且 signal 要在持锁修改谓词后发出以防丢失唤醒,这就是标准生产者-消费者模式。