擅长:python、mysql、java
<p>正如millimoose所指出的,这里的问题是<code>self.A[i] = self.A[i] + 1</code>中发生的竞争条件。在计算<code>self.A[i] + 1</code>时,<code>self.A[i]</code>可能已经被另一个进程更改了。在</p>
<p>您的问题的一个可能的解决方案是将索引传回父级,然后由父级执行加法。在</p>
<pre><code>from multiprocessing import Process, Manager
import random
class MyProc(Process):
def __init__(self, B, length):
Process.__init__(self)
self.B = B
self.length = length
def run(self):
i = random.randint(0, self.length-1)
self.B.append(i)
if __name__ == '__main__':
procs = []
M = Manager()
a = range(15)
b = M.list()
print('A: {0}'.format(a))
print('sum(A) = {0}'.format(sum(a)))
for i in range(100):
procs.append(MyProc(b, len(a)))
map(lambda x: x.start(), procs)
map(lambda x: x.join(), procs)
for i in b:
a[i] = a[i] + 1
print('A: {0}'.format(a))
print('sum(A) = {0}'.format(sum(a)))
</code></pre>
<p>将元素追加到数组中只是一个操作,因此避免了竞争条件。在</p>