对volatile int的单写多读??

我已经不止一次听到关于volatile int的安全读写方面的谬论了。

最常见的是所谓的volatile int的变量的单写多读操作是多线程安全的。

这个结论很搞笑,因为每当支持这个节论的人给我讲一大堆诸如锁总线,原子指令方面的东西时,(权且当他们都说的全对)我几乎都可以反问他:根据你说的东西可以得到一个结论,volatile int是也多线程写安全的(串行的),volatile int就是原生的信号量。那些搞并发编程的人难道都是吃饱了撑的,搞什么锁来玩的?

 

好了,谈些基本点,基于c语言标准:

1。volatile的行为是不可移植的(基于编译器,编译器基于cpu)。c语言另外一个不可移植的东西是位域。

2。volatile的行为编译器至少都当作io行为(最低限度的可移植语义,也是最好理解的一种说法,可惜很多人都不明白io行为意味着什么)。

3。volatile变量的读写操作将禁止该操作后的指令在该操作之前执行,之前的指令也不得推后执行。(禁止执行流水线,矢量化等等常见优化,总之跨volatile不能打乱,合并原有的语句来进行优化)

4。c代码编译成汇编之后,什么volatile之内的关键字全没了,只有一堆汇编指令。

 

5。多线程的语义取决于实现(基于操作系统,操作系统基于cpu,实现代码也都是汇编)。不同的操作系统的多线程实现和调度可能基于不同的原理,和内存管理机制往往关系也不小。这也是win32居然有用户态的critical section这样的同步原语

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值