Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
02.05.2014
Размер:
218.62 Кб
Скачать
          1. Вербальные (словесные) тексты алгоритма

Промежуточные Питон-подобные формы записи алгоритма

ВТА: Вербальный текст алгоритма

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоиртма

A40 = Z5

A30 = Z7 – FA40 – Z4 – JA40 – Z7

A20 = Z3 – Z6

A10 = Z6 – FA20 – Z0 – JA20

A581 = FA30 – FA10 – Z1 – JA10 – JA30

РТА: Рабочий текст алгоритма

alg A40( ): Zh5( )

alg A30( ): Zh7; Fork(A40( )); Zh4; Join_&(A40( ));Zh7

alg A20( ): Zh3( );Zh6

alg A10( ): Zh6; Fork(A20( )); Zh0; Join_&(A20( ))

alg A581( ): Fork(A30( )); Fork(A10( )); Zh1( ); Join_&(A10( )); Join_&(A30( ))

ВИ: Вертикальное исполнение

ШТА:

Шаблон текста алгоритма

РТА:

Рабочий текст алгоритма

A40 =

Z5

A40 =

Z5

A40 =

| Z5

A40 =

| Z5

Alg40:

Zh5()

A30 =

Z7

FA40

Z4

JA40

Z7

A30 =

Z7 –

FA40 –

Z4 –

JA40 –

Z7

A30 =

| Z7 –

| FA40 –

| Z4 –

| JA40 –

| Z7

A30 =

| Z7

| FA40

| Z4

| JA40

| Z7

alg A30():

Zh7( )

Fork(A40( ))

Zh4

Join_&(A40( ))

Zh7( )

A20 =

Z3

Z6

A20 =

Z3–

Z6

A20 =

| Z3–

| Z6

A20 =

| Z3

| Z6

Alg20:

Zh3()

Zh6()

A10 =

Z6

FA20

Z0

JA20

A10 =

Z6 –

FA20–

Z0 –

JA20

A10 =

| Z6 –

| FA20–

| Z0 –

| JA20

A10 =

| Z6

| FA20

| Z0

| JA20

alg A10():

Zh6( )

Fork(A20( ))

Zh0

Join_&(A20( ))

A581= FA30

FA10

Z1

JA10

JA30

A581= FA30 –

FA10–

Z1–

JA10 –

JA30–

A581=

| FA30 –

| FA10–

| Z1–

| JA10 –

| JA30–

A581=

| FA30

| FA10

| Z1

| JA10

| JA30

alg A581():

Fork(A30())

Fork(A10())

Zh1()

Join_&(A10())

Join_&(A30())

    1. Многопоточная программная реализация алгоритма

          1. Реализация компонент алгоритма

Далее представлена многопоточная программная реализация заданных фрагментов исходного параллельного алгоритма.

Язык программирования: Питон (Python)

РТА:

Рабочий текст алгоритма

ИТП:

Исходный текст подпрограмм

Alg40:

Zh5()

def A40(ccrt, hCycles):

hCycles.za40 = 0

# Переменная индикации окончания A40

hCycles.Zh(ccrt.techsys.head5)

hCycles.za40 = 1

# Индикация окончания процесса A40

alg A30():

Zh7( )

Fork(A40( ))

Zh4

Join_&(A40( ))

Zh7( )

def A30(ccrt, hCycles):

hCycles.za30 = 0

# Переменная индикации окончания A30

hCycles.Zh(ccrt.techsys.head7)

thread.start_new(expSub.A40, (ccrt, hCycles, ))

hCycles.Zh(ccrt.techsys.head4)

while not hCycles.za40:

time.sleep(0.1)

hCycles.Zh(ccrt.techsys.head7)

hCycles.za30 = 1

# Индикация окончания процесса A30

alg20:

Zh3()

Zh6()

def A20(ccrt, hCycles):

hCycles.za20 = 0

# Переменная индикации окончания A20

hCycles.Zh(ccrt.techsys.head3)

hCycles.Zh(ccrt.techsys.head6)

hCycles.za20 = 1

# Индикация окончания процесса A20

alg A10():

Zh6( )

Fork(A20( ))

Zh0

Join_&(A20( ))

def A10(ccrt, hCycles):

hCycles.za10 = 0

# Переменная индикации окончания A10

hCycles.Zh(ccrt.techsys.head6)

thread.start_new(expSub.A20, (ccrt, hCycles, ))

hCycles.Zh(ccrt.techsys.head0)

while not hCycles.za20:

time.sleep(0.1)

hCycles.za10 = 1

# Индикация окончания процесса A10

alg A581():

Fork(A30())

Fork(A10())

Zh1()

Join_&(A10(

))

Join_&(A30(

))

def eA581(ccrt, hCycles):

thread.start_new(expSub.A30, (ccrt, hCycles, ))

thread.start_new(expSub.A10, (ccrt, hCycles, ))

hCycles.Zh(ccrt.techsys.head1)

while not hCycles.za10:

while not hCycles.za30:

time.sleep(0.1)