párhuzamos programozás (a fork/join és a parbegin/parend technika)

87
Párhuzamos programozás (a fork/join és a parbegin/parend technika) Többfeladatos rendszereknél, ahol párhuzamosan több folyamat végrehajtására is lehetőség van (pl. többprocesszoros, vagy elosztott architektúra), a rendszerprogramozóknak, illetve az alkalmazások íróinak a klasszikus lineáris programozási technikát túl kell lépniük, párhuzamos programozást kell alkalmazniuk. Az alábbiakban a párhuzamos programozási technika egy alacsonyabb és egy magasabb szintű nyelvhez illeszkedő módszerét ismerhetik meg: Fork-join utasítás pár Parbegin-parend utasítás pár

Upload: claral

Post on 06-Jan-2016

31 views

Category:

Documents


9 download

DESCRIPTION

Párhuzamos programozás (a fork/join és a parbegin/parend technika). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Párhuzamos programozás(a fork/join és a parbegin/parend technika)

• Többfeladatos rendszereknél, ahol párhuzamosan több folyamat végrehajtására is lehetőség van (pl. többprocesszoros, vagy elosztott architektúra), a rendszerprogramozóknak, illetve az alkalmazások íróinak a klasszikus lineáris programozási technikát túl kell lépniük, párhuzamos programozást kell alkalmazniuk.

• Az alábbiakban a párhuzamos programozási technika egy alacsonyabb és egy magasabb szintű nyelvhez illeszkedő módszerét ismerhetik meg:– Fork-join utasítás pár–Parbegin-parend utasítás pár

Page 2: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

FORK - JOIN

Page 3: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Párhuzamosság, szinkronizálás, konkurencia

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

Page 4: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Párhuzamosság, szinkronizálás, konkurencia

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

Bizonyos utasítások csak egymás után(szekvenciálisan) hajthatók végre, pl. u1 és u2, hiszen u2 használja u1 eredményét

Page 5: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Párhuzamosság, szinkronizálás, konkurencia

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

Bizonyos utasítások csak egymás után(szekvenciálisan) hajthatók végre, pl. u1 és u2, hiszen u2 használja u1 eredményét

DE: pl. u3 és u4 egyszerre, egymással párhuzamosan is végrehajtható, hiszen nemfüggenek egymástól

Page 6: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• Csomópontok: UTASÍTÁSOK

• Élek: Abban a csomópontban lévõ utasítás, ahonnan egy él indul, MEG KELL, HOGY ELÕZZE azt az utasítást, amely abban a csomópontban található, ahová az él mutat

Precedenciagráf

Page 7: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Szerkesszük meg a precedenciagráfot!

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

Page 8: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u1

Page 9: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u1

u2

Page 10: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3

u2

u1

Page 11: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3 u4

u2

u1

Page 12: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3 u4

u5

u2

u1

Page 13: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3 u4 u6

u5

u2

u1

Page 14: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3 u4 u6

u5

u7

u2

u1

Page 15: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Precedenciagráf

ha több él találkozik egy csomópontban: szinkronizálás!

u1: x:=12;

u2: y:=x/4;

u3: a:=x+y;

u4: b:=x-y;

u5: c:=a*b;

u6: d:=x+1;

u7: e:=c+d;

u3 u4 u6

u5

u7

u1

u2

Page 16: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• A precedenciagráfok szemléletesen tükrözik a párhuzamosítási lehetõségeket, de programozásra közvetlenül nem használhatók

• 1. megoldás: fork / join utasításpár

• 2. megoldás: parbegin/parend utasításpár

Page 17: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár

• fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található

Page 18: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár

• fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található

u1

u2 u3

Page 19: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található

Fork / join utasításpár

u1

u2 u3

u1

fork

u2 u3

Page 20: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• fork utasítás: a végrehajtás két egymással párhuzamosan végrehajtható ágra szakad, az egyik ág közvetlenül a fork utasítás után, a másik ág a megadott címkénél található

Fork / join utasításpár

u1

fork

u2 u3

u1;fork L;u2;...

L: u3;

u1

u2 u3

Page 21: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár• join utasítás: két vagy több ág egyesítése;

–az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal”

–az egyesítendõ ágak számát egy számláló mutatja

Page 22: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár• join utasítás: két vagy több ág egyesítése;

–az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal”

–az egyesítendõ ágak számát egy számláló mutatja

u3

u1 u2

Page 23: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár• join utasítás: két vagy több ág egyesítése;

–az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal”

–az egyesítendõ ágak számát egy számláló mutatja

u3

u1 u2

u3

join

u1 u2

Page 24: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• join utasítás: két vagy több ág egyesítése;

–az ágak “bevárják egymást” (szinkronizáció) és csak a legutoljára “érkezõ” folytatódik, a többi “meghal”

–az egyesítendõ ágak számát egy számláló mutatja

Fork / join utasításpár

u3

join

u1 u2

száml:=2; u1; goto L; u2;L: join száml; u3;

u3

u1 u2

Page 25: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Fork / join utasításpár

u1

fork

u2 u3

u3

join

u1 u2

u1;fork L;u2;...

L: u3;

száml:=2; u1; goto L; u2;L: join száml; u3;

Page 26: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Példa a fork/join utasítás használatára

u1

u2

u3 u4 u6

u5

u7

Page 27: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;

u1

u3 u4 u6

u5

u7

u2

Page 28: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u3 u4 u6

u5

u7

u2

u1; fork L1;

Page 29: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2;

Page 30: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2;

Page 31: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3;

Page 32: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3; gotoL3;

Page 33: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3; gotoL3;

L2:

Page 34: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;

Page 35: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3:

Page 36: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

Page 37: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

Page 38: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5;

Page 39: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

Page 40: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1:

Page 41: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;

Page 42: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;L4:

Page 43: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;L4: join száml2;

Page 44: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;L4: join száml2;

Page 45: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;L4: join száml2;

u7;

Page 46: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

száml2 := 2; száml1 := 2; u1; fork L1; u2; fork L2; u3; gotoL3;

L2: u4;L3: join száml1;

u5; gotoL4;

L1: u6;L4: join száml2;

u7;

Page 47: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

PARBEGIN - PAREND

Page 48: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Parbegin / parend utasításpár• A fork / join utasítások használatával

áttekinthetetlen programstruktúra jön létre, a sok “goto” utasítás miatt

• Megoldás: parbegin / parend utasítások

• parbegin u1; u2; .... parend;

• Jelentése: u1, u2, .... egymással párhuzamosan végrehajtható utasítások

Page 49: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Példa a parbegin/parend utasítás használatára

u1

u2

u3 u4 u6

u5

u7

Page 50: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2

u3 u4 u6

u5

u7

• u1;

Page 51: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;u1

u2

u3 u4 u6

u5

u7

Page 52: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbeginu1

u2

u3 u4 u6

u5

u7

Page 53: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;u1

u2

u3 u4 u6

u5

u7

Page 54: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u1

u2

u3 u4 u6

u5

u7

Page 55: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;

u1

u2

u3 u4

u5

u7

u6

Page 56: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u1

u2

u3 u4

u5

u7

u6

Page 57: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;

u1

u2

u3 u4

u5

u7

u6

Page 58: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

u1

u2

u3 u4

u5

u7

u6

Page 59: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;

u1

u2

u3 u4

u5

u7

u6

Page 60: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;u5;

u1

u2

u3 u4

u5

u7

u6

Page 61: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;u5;

end;

u1

u2

u3 u4

u5

u7

u6

Page 62: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;u5;

end;parend;

u1

u2

u3 u4

u5

u7

u6

Page 63: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;u5;

end;parend;u7;

u1

u2

u3 u4

u5

u7

u6

Page 64: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1;parbegin

u6;begin

u2;parbegin

u3;u4;

parend;u5;

end;parend;u7;

u1

u2

u3 u4

u5

u7

u6

Page 65: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Parbegin / parend utasításpár

• A parbegin/parend utasításpár nem univerzális

• Ez a precedenciagráf nem írható le segítségükkel

u1

u2 u3

u4

u5 u6

u7

Page 66: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• A parbegin/parend utasításpár nem univerzális

• Ez a precedenciagráf nem írható le segítségükkel

u1

u2 u3

u4

u5 u6

u7

Parbegin / parend utasításpár

Page 67: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

Szemaforokkal kiegészítettPARBEGIN - PAREND

Page 68: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

A parbegin / parend általánosítása szemaforokkal

• Tisztán parbegin/parend utasításokkal nem írható le

• Rendeljünk minden élhez egy-egy átmenetet engedélyezõ szemafort

• E szemaforok kezdeti értéke “foglalt” kell legyen

u1

u2 u3

u4

u5 u6

u7

Page 69: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2

A parbegin / parend általánosítása szemaforokkal

Page 70: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

A parbegin / parend általánosítása szemaforokkal

Page 71: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

A parbegin / parend általánosítása szemaforokkal

Page 72: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4s63

A parbegin / parend általánosítása szemaforokkal

Page 73: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

A parbegin / parend általánosítása szemaforokkal

Page 74: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

A parbegin / parend általánosítása szemaforokkal

Page 75: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

A parbegin / parend általánosítása szemaforokkal

Page 76: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 77: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 78: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 79: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s3

s4

s64

s63

s5

s75

s76

s2

A parbegin / parend általánosítása szemaforokkal

Page 80: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 81: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 82: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

begin P(s4); u4; V(s5); V(s64); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 83: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

begin P(s4); u4; V(s5); V(s64); end;

begin P(s5); u5; V(s75); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 84: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

begin P(s4); u4; V(s5); V(s64); end;

begin P(s5); u5; V(s75); end;

begin P(s64); P(s63); u6; V(s76); end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 85: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

begin P(s4); u4; V(s5); V(s64); end;

begin P(s5); u5; V(s75); end;

begin P(s64); P(s63); u6; V(s76); end;

begin P(s75); P(s76); u7; end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 86: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

parbegin

begin u1; V(s2); V(s3); end;

begin P(s2); u2; V(s4); end;

begin P(s3); u3; V(s63); end;

begin P(s4); u4; V(s5); V(s64); end;

begin P(s5); u5; V(s75); end;

begin P(s64); P(s63); u6; V(s76); end;

begin P(s75); P(s76); u7; end;

parend;

u1

u2 u3

u4

u5 u6

u7

s2 s3

s4

s64

s63

s5

s75

s76

A parbegin / parend általánosítása szemaforokkal

Page 87: Párhuzamos programozás (a  fork/join  és a  parbegin/parend  technika)

• A szemaforokkal kiegészített megoldás lassabb mint a tisztán parbegin/parend utasításokat tartalmazó megoldás, ezért csak akkor használjuk, ha feltétlen szükséges!

A parbegin / parend általánosítása szemaforokkal