搜索
bottom↓
回复: 9

不加临界段的写入过程会出现什么样的错误?

[复制链接]

出0入10汤圆

发表于 2014-10-31 13:56:53 | 显示全部楼层 |阅读模式
本帖最后由 10xjzheng 于 2014-10-31 14:14 编辑

1.用临界段保护起一个变量的写入,是不是因为变量的写入过程是多个周期,如果只是写到一半然后就读过去就会出现错误?
2.如果是上面那样子,大概会出现什么样的错误结果?比如a=100;在写入过程没有用临界段保护,然后又有程序要来读变量a的值,那么他可能会读到哪几种情况?

出0入37汤圆

发表于 2014-10-31 14:49:58 | 显示全部楼层
多线程读写,建议看看操作系统的书

出0入8汤圆

发表于 2014-10-31 15:00:12 | 显示全部楼层
是的,是为了让变量的操作成为一个原子过程,
临界区只涉及单个变量的话,
读到值,是100,或者读到a之前的值,这一般不会有什么影响,如果说影响的话,只是读取的线程,可能会稍晚才会感知到a变化了,晚一些做相应的处理。


出0入0汤圆

发表于 2014-10-31 15:34:49 | 显示全部楼层
如果你变量的生命周期,是跨任务的,那你就得加保护; 如果你变量只是单任务的,就不用加保护;

出0入0汤圆

发表于 2014-10-31 15:36:16 | 显示全部楼层
security 发表于 2014-10-31 15:00
是的,是为了让变量的操作成为一个原子过程,
临界区只涉及单个变量的话,
读到值,是100,或者读到a之前的 ...

你想简单了!
如果是变量涉及2个及2个以上任务,潜在的危险绝不是你说的这个,如果是你说的这个就好了;

出0入0汤圆

发表于 2014-10-31 15:45:55 | 显示全部楼层
什么都有可能。老老实实加上吧

出0入8汤圆

发表于 2014-10-31 16:07:30 | 显示全部楼层
kinsno 发表于 2014-10-31 15:36
你想简单了!
如果是变量涉及2个及2个以上任务,潜在的危险绝不是你说的这个,如果是你说的这个就好了;
...

我那边的隐含条件,限于单写多读的情况,而其他情况,则需要加锁。

出0入10汤圆

 楼主| 发表于 2014-10-31 19:02:13 | 显示全部楼层
kinsno 发表于 2014-10-31 15:36
你想简单了!
如果是变量涉及2个及2个以上任务,潜在的危险绝不是你说的这个,如果是你说的这个就好了;
...

那读取的过程被打断没有关系吗?

出0入0汤圆

发表于 2014-10-31 19:40:49 | 显示全部楼层
当然有关系。不过,关于临界段的处理是个复杂的问题。不走极端就行。原则是对程序没有不良影响。麻烦在判断是否有影响。有时恨不得所有的临界段都加保护。我经常忘记保护。

出0入0汤圆

发表于 2014-10-31 21:23:45 | 显示全部楼层
10xjzheng 发表于 2014-10-31 19:02
那读取的过程被打断没有关系吗?

读的时候更加有关系,读的时候不加保护出现的后果更加危险;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 03:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表