【Linux】线程安全问题
发布日期:2021-05-10 06:33:36 浏览次数:19 分类:技术文章

本文共 492 字,大约阅读时间需要 1 分钟。

  • 线程不安全的现象
  • 抢票程序
     
  • 线程不安全的原理
  • 结论:线程不安全会导致程序结果的出现二义性
  • 举例:
    ① 假设现在在同一个程序当中有两个线程,线程A和线程B,并且有一个int类型的全部变量,值为10,线程A和线程B在鸽子的入口函数当中都对这样的一个全局变量进行++操作
     
    ② 线程A拥有CPU之后,对全局变量进行++ 操作,并非原子操作,也就是意味着线程A,在执行++的过程当中有可能被打断,假设,线程A刚刚将全局变量的数值10读到CPU的寄存器当中,就被切换出去了程序计数器当中保存下一条执行的指令,上下文信息当中保存寄存器的值,这两个东西是用来当线程A再次拥有CPU的时候,恢复现场使用的
     
    ③ 这会儿有可能**线程B拥有了CPU资源,对全局变量进行了++,并且将10加成了11,**回写到了内存当中
     
    线程A再次拥有了CPU资源之后,恢复现场,继续往下执行,从寄存器当中读到的值仍然是10,加完之后就是11,回写到内存当中之后也是11
  • 总结:理论上,线程A和线程B对全局变量进行了+1操作,理论上全局变量的值应该变成12,但是,线程程序计数器的结果有可能是11,所以这就是线程不安全

转载地址:https://blog.csdn.net/weixin_43967449/article/details/110194462 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Linux】死锁
下一篇:【Linux】条件变量等待的内部实现逻辑

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年08月27日 07时13分52秒