Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9393180
  • 博文数量: 1747
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20060
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1747)

文章存档

2024年(23)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2020-01-03 11:09:30

volatile 
1. 保证变量的可见性, 即 共享变量如果被其中一个线程给修改了,其他线程能够立即知道这个共享变量已经被修改了,当其他线程要读取这个变量的时候,最终会去内存中读取,而不是从自己的工作空间中读取.
2. 保证变量的有序性, 即 保证这个变量之前的代码一定会比它先执行,而之后的代码一定会比它后执行
, 编译器不会对此变量前后的代码进行重排序优化.

但  volatile 不能 完全保证一个变量的线程安全

volatile关键字不一定能够保证线程安全的问题,其实,在大多数情况下volatile还是可以保证变量的线程安全问题的。所以,在满足以下两个条件的情况下,volatile就能保证变量的线程安全问题:

  1. 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
  2. 变量不需要与其他状态变量共同参与不变约束
参考  https://www.cnblogs.com/kubidemanong/p/9505944.html 

==========================================================
==========================================================
==========================================================
https://blog.csdn.net/csdn1126274345/article/details/82315867
延伸: linux 下可保证原子操作的变量
信号量和互斥量

线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。
如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。
信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。
信号量是用来调协线程对共享资源的访问的。

通过使用信号量可以很好的完成线程同步。

信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区


阅读(2188) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~