仅在加入减少变量时是否需要互斥锁?

仅在加入减少变量时是否需要互斥锁?,第1张

概述我有一个带有一些整数字段的结构,比如 struct s { int a; int b; int c; int max;};struct s mystruct = {0, 0, 0, 0}; // Global var 然后我有N个线程,有时必须做的事情,或者 – 在前三个字段,有时必须读取它们然后更新最大字段.我必须在这里使用互斥吗?如果是的话,只有在读取/更新 我有一个带有一些整数字段的结构,比如

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,正如您所期望的那样.

总结

以上是内存溢出为你收集整理的仅在加入/减少变量时是否需要互斥锁?全部内容,希望文章能够帮你解决仅在加入/减少变量时是否需要互斥锁?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1221450.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存