привет, я новичок в многопоточном программировании в Pyhton , насколько мне известно, в многопоточном программировании в python объект блокировки может заблокировать процесс потока, например, в коде ниже self.lock.acquire () установит режим блокировки объекта на блокировку, и все остальные потоки, которые сталкиваются с self.lock.acquire, остановятся, пока объект блокировки не будет разблокирован, а затем код под self.lock .acquire выполняется очень точно, когда вы делаете блокируемый объект, его состояние по умолчанию разблокируется, когда он встречает
self.lock.acquire, затем он устанавливается на блокировку и другие потоки, которые будут сталкиваться с (self. lock.acquire) тогда, поскольку он установлен на блокировку, будет ждать и ничего не будет сделано, пока объект блокировки не будет разблокирован с помощью self.lock.realese, тогда self.lock.acquire снова установит объект блокировки в режим блокировки, а затем продолжит до тех пор, пока достигает объекта realese, но вопрос здесь, если данные распределяются между более чем двумя потоками, что происходит Например, код ниже g распределяется между тремя потоками. Единственное, что я могу себе представить, это то, что он не является многопоточным, потому что, когда вызывается функция realese в add_one, и мы знаем, что оператор self.lock.acquire заблокирован в обеих функциях. или поток функций add_two и add_three, поэтому, что здесь произойдет, он сначала выполнит self.lock.acquire функции add_two, а затем из-за чего мы теперь заблокируем функцию add_three или как ?? так скажи мне точно, что здесь будет
from threading import Lock, Thread
lock = Lock()
g = 0
def add_one():
"""
Just used for demonstration. It’s bad to use the ‘global’
statement in general.
"""
global g
lock.acquire()
g += 1
lock.release()
def add_two():
global g
lock.acquire()
g += 2
lock.release()
def add_three():
global g
lock.acquire()
g += 2
lock.release()
threads = []
for func in [add_one, add_two,add_three]:
threads.append(Thread(target=func))
threads[-1].start()
for thread in threads:
thread.join()
print(g)