-
假设场景
假设有一个CPU,两个线程:一个线程A,一个线程B;线程A和线程B都想对全局变量 i 进行++操作,例如i = 100 -
假设线程A先运行,但是线程A将 i 的值读到寄存器之后,就被线程切换了。(线程A的PCB中的程序计数器和上下文信息分别保存了下一条要执行的汇编指令和寄存器中已经保存的内容)
-
假设线程B运行时,正常完成了++操作。即 i 的值在内存当中被修改增加1了,此时 i 的值为101。
-
当线程A再次被切换回来时,会依据其程序计数器和上下文信息来恢复执行:将寄存器中保存的是第一次读取的 i 的值100.在执行完++操作后将值101回写到内存当中(将 i = 101修改称为 i = 101)。
-
因此表面上程序执行了两次++操作,但内存中的结果只体现了一次,这就是线程不安全现象
【面试题】如何描述线程不安全现象?
最新推荐文章于 2023-04-05 14:11:51 发布