我正在模拟一个人群感应系统,其中多个设备是多核的,需要彼此同步数据。
我有N
台设备。每个设备都有多个线程M
,并且它是数据D
(在这种情况下是具有整数值的字典)
每个N * M
线程在运行时必须通过从其他N - 1
个设备(如果有)中收集数据来计算设备的D ['generic_key'](因为其他一些{{ 1}}设备可能没有generic_key的值,或者可能不在该设备的邻居中),计算新数据(这是自动完成的),然后将数据更新为第一个具有要提供的数据的设备地方
基本上,N - 1
更新应按顺序进行。多线程部分是,对于D['any_kind_of_key']
,device1
线程将针对不同的密钥更新M
我的问题是如何解决1个键的竞争条件:
示例
在D
个设备中,我有3个设备N
,它们具有密钥(d1, d2, d3)
的数据
在key_1
更新值的同时如何安全地锁定d1[key1]
和d2[key1]
,以便之后d3
可以更新值?
d3通过工作
d1
创建new_value 所有[d1[key], d2[key1], d3[key1]]
的值都用新值替换
这是一个原子序列
d1, d2, d3
做同样的事情
这是一个原子序列
d1
做同样的事情
这也是一个原子序列