Неверный вывод многопроцессорной разделяемой памяти Python3 - PullRequest
0 голосов
/ 09 декабря 2018

В приведенном ниже коде я создаю многопроцессорный массив, передавая его двум различным объектам, один из них добавит 1 к этому и будет отслеживать, сколько раз он добавил один, а другой -вычтите 1 и аналогичным образом отследите количество раз, которое он вычел из него 1.

import multiprocessing 

class One(multiprocessing.Process):

    def __init__(self, value):
        multiprocessing.Process.__init__(self)

    def run(self):
        run = 0
        while True:
            with multiprocessing.Lock():
                value[0] += -1
                run += 1
                print(value[0],"subracting -1", run)

class Two(multiprocessing.Process):

    def __init__(self, value):
        multiprocessing.Process.__init__(self)

    def run(self):
        run = 0
        while True:
            with multiprocessing.Lock():
                value[0] += 1
                run += 1
                print(value[0], "adding +1", run)


if __name__=='__main__':
    import os
    value = multiprocessing.Array('i', 1)
    value[0] = 0
    os.system("clear")
    one = One(value):
    two = Two(value)
    one.start()
    two.start()
    two.join()
    one.join()
    print("Done")

и результат выполнения: -221 добавление +1 6953 -220 добавление +1 6954 -221 вычитание -1 7231-222, вычитающее -1 7232 -221, добавляющее +1 6955 -222, вычитающее -1 7233 -221, добавляющее +1 6956 -222, вычитающее -1 7234, функция, которая вычитала 1, выполнялась для 7324, а функция, которая добавляла 1, работала для 6956, поэтомурезультат должен быть 6956-7234 = -278, но результат равен -222, почему он не равен -278?

...