-
Многопоточная программная реализация алгоритма
-
Реализация компонент алгоритма
РТА: Рабочий текст алгоритма |
ИТП: Исходный текст подпрограмм |
alg40: Zh5()
|
def A40(ccrt, hCycles): hCycles.za40 = 0 # Переменная индикации окончания A40 hCycles.Zh(ccrt.techsys.head5) hCycles.za40 = 1 # Индикация окончания процесса 40
|
alg A30(): Zh4() Zh1()
|
def A30(ccrt, hCycles): hCycles.za30 = 0 # Переменная индикации окончания 30 hCycles.Zh(ccrt.techsys.head4) hCycles.Zh(ccrt.techsys.head1) hCycles.za30 = 1 # Индикация окончания процесса A30
|
alg A20(): Zh3()
|
def A20(ccrt, hCycles): hCycles.za20 = 0 # Переменная индикации окончания A20 hCycles.Zh(ccrt.techsys.head3) hCycles.za20 = 1 # Индикация окончания процесса 20
|
alg A10():
Fork(A30( )) zh7() Fork(A20( )) Zh8( ) Join_&(A20( )) Join_&(A30( )) Zh 0 () |
def A10(ccrt, hCycles): hCycles.za10 = 0 # Переменная индикации окончания A10 thread.start_new(expSub.A30, (ccrt, hCycles, )) hCycles.Zh(ccrt.techsys.head7) thread.start_new(expSub.A20, (ccrt, hCycles, )) hCycles.Zh(ccrt.techsys.head8) while not hCycles.za20: time.sleep(1) while not hCycles.za30: time.sleep(1) hCycles.Zh(ccrt.techsys.head10) hCycles.za10 = 1 # Индикация окончания процесса A10
|
alg A991(): Fork(A10( )) Fork(A40( )) Zh2( ) Join_&(A40( )) Zh2( ) Join_&(A10( )) |
def eAxx1(ccrt, hCycles): thread.start_new(expSub.A10, (ccrt, hCycles, )) thread.start_new(expSub.A40, (ccrt, hCycles, )) hCycles.Zh(ccrt.techsys.head2) while not hCycles.za40: time.sleep(1) hCycles.Zh(ccrt.techsys.head2) while not hCycles.za10: time.sleep(1) |
-
Исходный текст программной реализации
ВИ: Вертикальное исполнение
Первичное решение
def A40(ccrt, hCycles): # подпрограмма дополнительного потока
hCycles.za40 = 0 # Введение индикации окончания A40
hCycles.Zh(ccrt.techsys.head5) # СГ5 - типовой цикл
hCycles.za40 = 1 # Окончание процесса A40
def A30(ccrt, hCycles): # подпрограмма дополнительного потока
hCycles.za30 = 0 # Введение индикации окончания A30
hCycles.Zh(ccrt.techsys.head4) # СГ4 - типовой цикл
hCycles.Zh(ccrt.techsys.head1) # СГ1 - типовой цикл
hCycles.za30 = 1 # Окончание процесса A30
def A20(ccrt, hCycles): # подпрограмма дополнительного потока
hCycles.za20 = 0 # Введение индикации окончания A20
hCycles.Zh(ccrt.techsys.head3) # СГ3 - типовой цикл
hCycles.za20 = 1 # Окончание процесса A20
def A10(ccrt, hCycles): # подпрограмма дополнительного потока
hCycles.za10 = 0 # Введение индикации окончания A10
thread.start_new(expSub.A30, (ccrt, hCycles, )) # поток A30
hCycles.Zh(ccrt.techsys.head7) # СГ7 - типовой цикл
thread.start_new(expSub.A20, (ccrt, hCycles, )) # поток A20
hCycles.Zh(ccrt.techsys.head8) # СГ8 - типовой цикл
while not hCycles.za20: # Контроль окончания A200
time.sleep(1) # задержка в цикле ожидания
while not hCycles.za30: # Контроль окончания A30
time.sleep(1) # задержка в цикле ожидания
hCycles.Zh(ccrt.techsys.head10) # СГ10 - типовой цикл
hCycles.za10 = 1 # Окончание процесса A10
def A10(ccrt, hCycles): # подпрограмма дополнительного потока
hCycles.za10 = 0 # Введение индикации окончания A10
thread.start_new(expSub.A40,(ccrt,hCycles, )) # поток A40
hCycles.Zh(ccrt.techsys.head3) # СГ3 - типовой цикл
hCycles.Zh(ccrt.techsys.head4) # СГ4 - типовой цикл
while not hCycles.za40: # Контроль окончания A40
time.sleep(0.1) # задержка в цикле ожидания
hCycles.za10 = 1 # Окончание процесса A10
def eAxx1(ccrt, hCycles): # alg A991() программа основного потока
thread.start_new(expSub.A10, (ccrt, hCycles, )) # поток A10
thread.start_new(expSub.A40, (ccrt, hCycles, )) # поток A40
hCycles.Zh(ccrt.techsys.head2) # СГ2 - типовой цикл
while not hCycles.za40: # Контроль окончания A40
time.sleep(0.1) # задержка в цикле ожидания
hCycles.Zh(ccrt.techsys.head2) # СГ2 - типовой цикл
while not hCycles.za10: # Контроль окончания A10
time.sleep(0.1) # задержка в цикле ожидания