在多线程处理中,用汇编语言记述的代码每运行1行,处理都有可能切换到其他线程(函数)中。因而,设 MyFuncl 函数在读出counter 的数值 100 后,还未来得及将它的2倍值 200写人 counter时,正巧 MyFunc2 函数读出了 counter的数值 100,那么结果就会导致 counter 的数值变成了 200(图 10-8 )。
为了避免该 bug,我们可以采用以函数或C语言源代码的行为单位来禁止线程切换的锁定方法。
在多线程处理中,用汇编语言记述的代码每运行1行,处理都有可能切换到其他线程(函数)中。因而,设 MyFuncl 函数在读出counter 的数值 100 后,还未来得及将它的2倍值 200写人 counter时,正巧 MyFunc2 函数读出了 counter的数值 100,那么结果就会导致 counter 的数值变成了 200(图 10-8 )。
为了避免该 bug,我们可以采用以函数或C语言源代码的行为单位来禁止线程切换的锁定方法。