社区
进程/线程/DLL
帖子详情
两个线程同时读写一个变量需不需要互斥?
ilovett
2004-12-15 01:52:05
两个线程同时读写一个变量需不需要互斥?
比如读写一个struct?double?int?char?
哪些情况下需要互斥?
比如读写一个char,如果能在同一个CPU时钟周期内完成,那么是否就无需互斥?
如果读写一个struct,如果无法在同一个CPU时钟周期内完成,那么是否就必须互斥?
哪位朋友可以解释一下?
...全文
1905
15
打赏
收藏
两个线程同时读写一个变量需不需要互斥?
两个线程同时读写一个变量需不需要互斥? 比如读写一个struct?double?int?char? 哪些情况下需要互斥? 比如读写一个char,如果能在同一个CPU时钟周期内完成,那么是否就无需互斥? 如果读写一个struct,如果无法在同一个CPU时钟周期内完成,那么是否就必须互斥? 哪位朋友可以解释一下?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oyljerry
2004-12-16
打赏
举报
回复
读,可以共享的读
写需要注意
lu1172101275
2004-12-16
打赏
举报
回复
按理来说,我们要得到最新的变量信息,那一般“先写后读”吧。可是,谁知道读线程,写线程他们什么时候执行啊 ,最好加互斥锁,保证你写没放开变量的时候,读线程不会一腿
插进来先读了,这样会产生“先读后写”,显然得到的是旧信息
gloomyfish
2004-12-16
打赏
举报
回复
要分情况的~~~~~
有时候临界资源就可以了
zdleek
2004-12-16
打赏
举报
回复
最好是要互斥 以数据结构为例
如果写到一半的时候数据结构被读取
那么读到的值有的是新的 有的是原来的 这个就会发生数据错误
gzlucky
2004-12-15
打赏
举报
回复
"char也未必可以在同一个CPU时钟周期内完成。你编译成汇编就知道了。"
为什么?
除非你的char变量是一个寄存器变量,否则你的赋值语句可能存在寻址,这样就不一定在同一个CPU时钟周期内完成了。如果是两个地址间的赋值(通常程序中定义的变量都是存放在内存的某个地址中),就可能是两条汇编甚至更多的语句来完成。
tabris17
2004-12-15
打赏
举报
回复
用InterlockedExchangeAdd,InterlockedExchangePointer来写变量就可以
不用互撤和临界区那么麻烦
ilovett
2004-12-15
打赏
举报
回复
"char也未必可以在同一个CPU时钟周期内完成。你编译成汇编就知道了。"
为什么?
broown
2004-12-15
打赏
举报
回复
读不用,写就必须。
简单的你可以用临界区类CCriticalSection类对资源进行同步保护
kugou123
2004-12-15
打赏
举报
回复
如果两个线程只读,就不需要,如果要写,就必须互斥,不然的化,会造成混乱。
HunterForPig
2004-12-15
打赏
举报
回复
纯粹只是读操作,无需互斥,因为变量值不会改变
写就需要,要不很容易出现脏数据,或异常
danyueer
2004-12-15
打赏
举报
回复
如果不是两个线程都写,就不需要互斥。否则,需要用关键段,对读写变量的过程进行同步处理。
cryptonym
2004-12-15
打赏
举报
回复
都读就不要。有读有写就要。
MZP
2004-12-15
打赏
举报
回复
只要是全局变量的访问,就要互斥!
如果变量正被一线程修改,而另一线程在读取,读取线程不加互斥一样会出错。
DentistryDoctor
2004-12-15
打赏
举报
回复
读不用,写就必须。
比如读写一个char,如果能在同一个CPU时钟周期内完成,那么是否就无需互斥?
谁保证?
如果读写一个struct,如果无法在同一个CPU时钟周期内完成,那么是否就必须互斥?
谁保证?
gzlucky
2004-12-15
打赏
举报
回复
读无所谓。
就怕有的在读,有的在写,或者是同时要写。
char也未必可以在同一个CPU时钟周期内完成。你编译成汇编就知道了。
读
写
互斥
当某个
变量
int a,被两个
线
程操作,一个
线
程只
读
,另一个
线
程
读
写
,这时
需
要lock保护吗? 这个真的跟具体的架构有关系,不同的架构,可能不一样! 但可以肯定,irq中断在指令与指令之间,但多cpu架构时,即使关了中断...
QT多
线
程操作同一个
变量
在不添加
互斥
锁的情况下,分别在两个
线
程对a
变量
进行累加。 1.计算量不是很大的话,最终的计算结果看似是满足预期结果的。 虽然代码顺序是先执行xianCheng_1的,但最终结果的输出顺序有可能是xianCheng_1先输出,也...
【C++】
线
程同步一
两个
线
程同时对一个全局
变量
++操作,保证最后的结果正确 (1)原子操作 #include <iostream> #include <thread> #include <mutex> #include <atomic> using namespace std; //
线
程同步一:...
linux系统中多
线
程同步之
互斥
变量
、
读
写
锁、条件
变量
互斥
变量
用于多
线
程竞争访问某一共享资源,
读
写
锁支持
线
程对共享数据的共享
读
互斥
写
,
互斥
变量
给
线
程提供了
互斥
访问共享数据的手段它可以保证对共享数据访问的一致性。 1.
互斥
变量
1.1
互斥
变量
的初始化
详解linux多
线
程——
互斥
锁、条件
变量
、
读
写
锁、自旋锁、信号量
如果一个
线
程已经锁定了一个
互斥
量,第二个
线
程又试图去锁定这个
互斥
量,则第二个
线
程将被挂起(不占用任何cpu资源),直到第一个
线
程解除对这个
互斥
量的锁定为止,第二个
线
程则被唤醒并继续执行,同时锁定这个
互斥
...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章