
struct s { int a; int b; int c; int max;};struct s mystruct = {0,0}; // Global var 然后我有N个线程,有时必须做的事情,或者 – 在前三个字段,有时必须读取它们然后更新最大字段.我必须在这里使用互斥吗?如果是的话,只有在读取/更新max或者总是吗?为什么?如果我只是增加或减少前三个字段,那么一个线程在另一个之前运行是否重要?
解决方法 如果您执行的 *** 作不是原子 *** 作,则需要同步对变量的访问.考虑单个变量a具有初始值(例如5)的场景.
现在我们有两个线程T1和T2,都希望增加它.增量 *** 作如何分解,以防它不是原子的(只是一个例子,它可能是其他方式)?
1)将值读入临时位置.
2)增加并将临时位置写回.
现在考虑一个场景T1首先执行此 *** 作,然后在完成步骤1之后由T2抢占:
T1:1)读入temp1 => temp1目录= 5
T2:1)读入temp2 => TEMP2 = 5
T2:2)将temp2 1写入a =>一个= 6
T1:2)将temp1 1写入a =>一个= 6
因此,a的最终值将是6而不是7,正如您所期望的那样.
总结以上是内存溢出为你收集整理的仅在加入/减少变量时是否需要互斥锁?全部内容,希望文章能够帮你解决仅在加入/减少变量时是否需要互斥锁?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)