У меня запущены два потока, и я хочу, чтобы они ждали друг друга в указанной строке c, используя threading.Condition (). Однако кажется, что глобальная переменная v не является глобальной. Это разные переменные для каждого потока. Вот минимальный жизнеспособный продукт:
import threading
lock = threading.Condition()
v = 0
n = 2
def barrier():
with lock:
global v
v =+ 1
print("v is increased to " + str(v))
if v == n:
print("v is equal to n")
lock.notifyAll()
print("v equals n")
v = 0
else:
lock.wait()
class ServerThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print("before barrier")
barrier()
print("after barrier")
for i in range(2):
t = ServerThread()
t.start()
Вывод такой:
before barrier
v is increased to 1
before barrier
v is increased to 1
, но я хочу, чтобы v был увеличен до 2 второй нитью, чтобы барьер мог быть прошло. Что не так?