前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发基础之线程安全

并发基础之线程安全

作者头像
suveng
发布2019-09-18 14:03:59
2770
发布2019-09-18 14:03:59
举报
文章被收录于专栏:分享/效率/工具/软件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_37933685/article/details/80862795

个人博客:https://suveng.github.io/blog/​​​​​​​

线程安全

1.原子性

原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰

2.有序性

在并发时,程序的执行可能就会出现乱序

一条指令的执行是可以分为很多步骤的

  1. 取指 IF
  2. 译码和取寄存器操作数 ID
  3. 执行或者有效地址计算 EX
  4. 存储器访问 MEM
  5. 写回 WB

指令重排

1530284737026
1530284737026
1530284744835
1530284744835
1530284767380
1530284767380

指令重排可以使流水线更加顺畅

3.可见性

可见性是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。 – 编译器优化 – 硬件优化(如写吸收,批操作)

4.Happen-Before

程序顺序原则:一个线程内保证语义的串行性 volatile规则:volatile变量的写,先发生于读,这保证了volatile变量的可见性 锁规则:解锁(unlock)必然发生在随后的加锁(lock)前 传递性:A先于B,B先于C,那么A必然先于C 线程的start()方法先于它的每一个动作 线程的所有操作先于线程的终结(Thread.join()) 线程的中断(interrupt())先于被中断线程的代码 对象的构造函数执行结束先于finalize()方法

5.线程安全的概念

指某个函数、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程安全
    • 1.原子性
      • 2.有序性
        • 指令重排
      • 3.可见性
        • 4.Happen-Before
          • 5.线程安全的概念
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档