Последовательность потоков с использованием условия () в модуле потоков в python - PullRequest
0 голосов
/ 20 марта 2020

При попытке упорядочить потоки, используя объект условия в модуле потоков, я вижу, что секвенирование, кажется, работает нормально в некотором порядке, при котором потоки запускаются. Но когда порядок меняется, последовательность не работает (похоже, что второй и третий потоки ничего не делают.

def first(c):
    c.acquire()
    print("first")
    c.notify()
    c.release()

def second(c,c1):
    c.acquire()
    c.wait()
    print("second")
    c.release()
    c1.acquire()
    c1.notify()
    c1.release()

def third(c1):
    c1.acquire()
    c1.wait()
    print("third")
    c1.release()


from threading import Lock,Thread
import threading
c = threading.Condition()
c1 = threading.Condition()
t = Thread(target=first, args=(c,))
t1 = Thread(target=second, args=(c,c1,))
t2 = Thread(target=third,args=(c1,))

#lst = [2,1,3] - Pass
#lst=[1,2,3] - Fail
#lst=[3,2,1] - Pass
#lst=[3,1,2] - Fail
for i in lst:
    if (i==1):
        t.start()
    elif(i==2):
        t1.start()
    elif(i==3):
        t2.start()
...