免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Aquester
打印 上一主题 下一主题

[C] 一个线程对long类型变量进行修改,多个线程只读这个long类型值,需要加锁吗? [复制链接]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
31 [报告]
发表于 2008-12-18 13:20 |只看该作者
应该是不需要的,读到的不是没改之前的,就是改之后的,对读来说加锁也是一样的结果

论坛徽章:
0
32 [报告]
发表于 2008-12-18 21:55 |只看该作者
原帖由 hellioncu 于 2008-12-18 13:20 发表
应该是不需要的,读到的不是没改之前的,就是改之后的,对读来说加锁也是一样的结果


我想也是这样的,根据我以前的实际经验,在LINUX平台上测试没有发现问题,但在HP上确实存在问题,可以通过死循环,两个线程测试出来。另外,实在要加锁,也可以不使用mtext,而直接使用原子操作即可。

论坛徽章:
0
33 [报告]
发表于 2008-12-19 13:59 |只看该作者
几个版主都说了要加锁,怎么这么多人就是不听呢。
还是那句老话,错误的行为未必有错误的结果。

论坛徽章:
0
34 [报告]
发表于 2008-12-19 15:01 |只看该作者
原帖由 Sorehead 于 2008-12-19 13:59 发表
几个版主都说了要加锁,怎么这么多人就是不听呢。
还是那句老话,错误的行为未必有错误的结果。


本来不想回的,版主说就一定正确么...
楼主的问题需不需要加锁取决于什么平台,和代码怎么写.
如果是80X86平台,读取到局部变量(堆栈上),就不需要,一条mov 指令就能读取到寄存器上,然后再mov到堆栈

论坛徽章:
0
35 [报告]
发表于 2008-12-19 16:13 |只看该作者
取一次,存一次,那是两条指令呀。
多位版主都这么说,自然有他们的道理,就一个这么说,我也会怀疑的。最主要的是,就是这个问题上,我跟这些版主的看法是一致的。

论坛徽章:
0
36 [报告]
发表于 2008-12-19 21:47 |只看该作者
谁有很权威的证明吗?
个人感觉确实不能光看CPU指令的个数。

论坛徽章:
0
37 [报告]
发表于 2008-12-19 22:04 |只看该作者
The Intel486 processor (and newer processors since) guarantees that the following
basic memory operations will always be carried out atomically:
•   Reading or writing a byte
•   Reading or writing a word aligned on a 16-bit boundary
•   Reading or writing a doubleword aligned on a 32-bit boundary

论坛徽章:
0
38 [报告]
发表于 2008-12-19 22:28 |只看该作者
如果只有一个THREAD写,其他的都是读,在X86上(long 4 bytes)不用加锁也没有问题。
因为只有一个写。而读和写本身就是原子的。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
39 [报告]
发表于 2008-12-20 00:33 |只看该作者
你这几个线程之间是怎么同步的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
40 [报告]
发表于 2008-12-20 00:38 |只看该作者
自从俺用了 STM 和 Message Passing,就再也不用考虑锁的问题啦!
真痛快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP