При попытке упорядочить потоки, используя объект условия в модуле потоков, я вижу, что секвенирование, кажется, работает нормально в некотором порядке, при котором потоки запускаются. Но когда порядок меняется, последовательность не работает (похоже, что второй и третий потоки ничего не делают.
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()