11142|12

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教大家一个问题,多个线程访问同一个全局变量 [复制链接]

请教大家一个问题,多个线程访问同一个全局变量,例如int A, 如果2个线程都有可能写这个变量A则需要加锁保护这个变量,但是如果一个线程可以读写A,而另外一个线程只是读取该变量A的值,请问大家不加锁是否可以?

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581) 群主:wangkj
此帖出自单片机论坛

最新回复

这种用法在采样与滤波计算中常用吧,一边采样,一边计算,可能会访问同一个数据。  详情 回复 发表于 2010-5-27 08:36
点赞 关注
 

回复
举报

13

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
肯定需要加锁
但是可以加读写锁
此帖出自单片机论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果第二个线程在第一个线程写之前读那么不就出错了
此帖出自单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

4
 
秋水-剑圣,你好,你说的出错是什么意思?是否可以这样理解: 例如当A=3时,如果第2个线程取读,在读取的过程中第1个线程要改变这个值例如改为4,则读取的就不对吗?是3还是4还是一个其它的值?我的程序如果读出的是3或者是4都认为是正确,但不能是一个错误的值,这样的情况可以不加锁吗?
此帖出自单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
你如果这么要求的话我觉得是可以的,你不要求读取的是最新值,IC-书童怎么看呢?
此帖出自单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
我不要求读取的是最新的值,应为我的程序是循环程序,这次读取的不是最新值,下次还可以读取到一个更新的值,但需要保证的是不得对取一个错误的数。
此帖出自单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

7
 
我认为可以
此帖出自单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

8
 
秋水-剑圣:
0041B53E  mov        eax,dword ptr [g_nCount1 (458A20h)]
0041B543  add        eax,1
0041B546  mov        dword ptr [g_nCount1 (458A20h)],eax
它中间有个ADD EAX,1,,假设在这个地方线程A的时间片到咯,它保存它的线程上下文假设此时EAX的值是1)。它不会去执行
mov        dword ptr [g_nCount1 (458A20h)],eax
就并没有把累加的结果放到g_nCount1所在的内存中,然后线程B执行它的代码。B执行后g_nCount1的值变成2.然后又切换到A执行(A回复线程的上下文).这个时候A就去执行mov        dword ptr [g_nCount1 (458A20h)],eax
此时线程A就把线程B所累加的值覆盖咯。g_nCount1 又变成1咯啊。就这样反复造成的最后两个结果不一样的
但是,我认为读取的值还是正确的,只不读取的还是另外一个线程上一次的值。
此帖出自单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
你实际测过没有?结果如何?
多重启设备几次看看,我觉得理论上很简单,应该是可以的
此帖出自单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

10
 
我试试看看
此帖出自单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

11
 
怎么样?
此帖出自单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

12
 
不是太好试,只能从理论上分析。
此帖出自单片机论坛
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(初级)

13
 
这种用法在采样与滤波计算中常用吧,一边采样,一边计算,可能会访问同一个数据。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表