18.3 线程存在的问题和临界区
2026/1/28大约 1 分钟
18.3 线程存在的问题和临界区
多个线程同时访问同一块内存(不限于全局变量)时存在的问题
修改一个变量的过程:
- 读变量的值并传递给CPU
- CPU计算结果
- 将结果写回变量
线程的切换可能发生在以上三个阶段中的任意一个。
假设num当前值为99
执行1次+1 和 一次 -1 操作后num的值应该保持不变。但是在上面的情景中,inc线程写入前切换到des线程,此时des读取到的num值是99,不管des对num如何操作,切换回inc后最终num的值都是100.
问题的原因:对num修改的操作分多步进行,可能因为切换线程被打断,导致数据没有更新完成。切换后使用的是更新前的数据。