仅在加入/减少变量时是否需要互斥锁?
发布时间:2020-12-16 10:36:45 所属栏目:百科 来源:网络整理
导读:我有一个带有一些整数字段的结构,比如 struct s { int a; int b; int c; int max;};struct s mystruct = {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)将值读入临时位置. 现在考虑一个场景T1首先执行此操作,然后在完成步骤1之后由T2抢占: T1:1)读入temp1 => temp1目录= 5 因此,a的最终值将是6而不是7,正如您所期望的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |