CNDEV
CNDEV.ORG
当前在线
论坛
CBD
程序员情感CBD
程序员见面交流会
CBD开发区
Java/J2ME
.NET/C#
数据库
Delphi/BCB
Visual C
其它
修真养身
中国象棋
纪念日
谈钱太俗,还是投机吧
听音乐
iCosta
资源共享
一隅
好文共赏
看电影看美剧
待定
狗屎
雪域召唤
工作流
专业显摆区
语录
情感
批评与自我批评
爱情故事
发牢骚
看三点区
游戏
CNDEV-CS/WOW
浩宇长空
生活
家有XPH
我爱学英语
美食天地ORG
半调子体育迷
观澳园友邻
搞笑奇文
拍照片
我读书我存在
论坛系统
超级垃圾站
系统建议及BUG
系统测试
中国开发网
: 论坛:
程序员情感CBD
: 贴子 637854
sealw
: 由于概念不清,所以问题多多
[阅读: 356] 2008-06-02 13:07:20
<空>
相关信息:
问一个多线程的数据读写同步问题。
(123字)
(
Tomorrow
[693]
2008-06-02 06:07
)
不需要吧
(空) (
aho
[305]
2008-06-02 06:17
)
多字节整型,理论上要加
(空) (
sealw
[410]
2008-06-02 06:17
)
通常不用
(空) (
玉楼
[287]
2008-06-02 06:24
)
不用,但是有一些前提条件。
(103字)
(
好望角
[386]
2008-06-02 06:32
)
一个只读的话一般不要吧。要是都写都要,原子操作除外。
(空) (
beijingshizi
[354]
2008-06-02 06:37
)
如果多字节,可能写到一半发生误读,所以Java里提供了java.util.concurrent.atomic.AtomicInteger
(空) (
sealw
[464]
2008-06-02 06:44
)
只要是 字 范围之内的一般不用.
(7字)
(
holly
[298]
2008-06-02 06:47
)
谢谢。保险起见还是要加互斥。
(63字)
(
Tomorrow
[356]
2008-06-02 06:54
)
建议写自动化测试,并在所有目标平台上执行
(空) (
sealw
[291]
2008-06-02 07:02
)
那就得加了。
(26字)
(
holly
[286]
2008-06-02 09:47
)
误读应该问题不大,是不是会读成写入之前的结果?
(空) (
beijingshizi
[358]
2008-06-02 06:47
)
顺序问题是 memory barrier 的事. 通常跟 cache 方式和指令集设计有关. 跟锁是两回事
(空) (
holly
[417]
2008-06-02 06:50
)
如果是 32bit 的 x86 CPU 一般不用
(空) (
holly
[383]
2008-06-02 06:46
)
刚才看到互斥锁,突然想到,再怎么实现,也是一个查看一个加锁。。。。。
(169字)
(
haitao
[525]
2008-06-02 06:59
)
是的,就是考虑到加锁影响性能才来问的。
(23字)
(
Tomorrow
[365]
2008-06-02 07:01
)
你完全错了
(16字)
(
holly
[314]
2008-06-02 09:45
)
叫什么不知道,只知道检测和设置2个操作之间不会被插入别的指令。。。。。
(53字)
(
haitao
[458]
2008-06-02 09:49
)
互斥锁不会保证lock 和unlock之间不会插入别的指令,也不是出于这个目的的.
(181字)
(
bjwf
[473]
2008-06-02 11:22
)
我说的就是lock。lock分解到最终,应该至少包含:查询,设置
(26字)
(
haitao
[357]
2008-06-02 12:04
)
需要的.否则在多cpu或多内核机器上可能会出莫名其妙的错
(空) (
bjwf
[372]
2008-06-02 07:06
)
不会的。x86 的 cache 是针对物理地址的,而且 x86 保证字操作的原子性
(空) (
holly
[359]
2008-06-02 09:46
)
o,如果是这样的话,那么加锁也几乎不会影响性能.
(122字)
(
bjwf
[402]
2008-06-02 10:05
)
写了个测试程序,在windows里就有问题。
(897字)
(
Tomorrow
[381]
2008-06-02 11:00
)
顺便测一下,加锁后速度有没有变化。。。。。。。。
(114字)
(
haitao
[363]
2008-06-02 11:16
)
这个判断如果不锁的话就不对吧: if((g_nCount == 200) || (g_nCount == 201) || (g_nCount == 199))
(空) (
没脾气2x
[386]
2008-06-02 11:49
)
faint. ++ 跟 -- 中间当然可以抢占了
(空) (
holly
[326]
2008-06-02 11:56
)
要不要先取到局部变量,再比较、打印啊?
(295字)
(
haitao
[360]
2008-06-02 12:22
)
++和--之间可以抢占,if条件3个表达式之间可以抢占,所以就有问题了
(空) (
sealw
[332]
2008-06-02 12:27
)
这里的讨论已经把很多不同层次的东西混淆到一块了.
(18字)
(
holly
[361]
2008-06-02 13:00
)
由于概念不清,所以问题多多
(空) (
sealw
[355]
2008-06-02 13:07
)
这是和同事讨论引起的。
(91字)
(
Tomorrow
[343]
2008-06-02 13:21
)
如果只是 "一个线程写一个数,另外一个线程只是来读"
(59字)
(
holly
[317]
2008-06-02 13:25
)
谢谢,明白了。如果只是一个字长之内的数的话可以不加锁了。
(空) (
Tomorrow
[335]
2008-06-02 13:39
)
int不小于一个字啊。DWORD
(32字)
(
beijingshizi
[379]
2008-06-03 01:24
)
难道虱子还停留在 8086 年代?
(空) (
holly
[346]
2008-06-03 01:34
)
整数不用lock
(空) (
龙之吻
[397]
2008-06-03 00:27
)
这是个多线程读写的错误例子。
(11字)
(
Tomorrow
[403]
2008-06-02 13:15
)
你这样有问题,判断和打印本身就是多个指令了,现在早就被赋值了。需要先取出变量临时储存。
(空) (
beijingshizi
[418]
2008-06-03 01:22
)
欢迎光临本社区,您还没有登录,不能发贴子。请在
这里登录