12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PROCEDURE Pl() =BEGINLOCK M DO...Thread.Wait(m,W); .. .END;END Pl;PROCEDURE P2() =BEGINLOCK M DO...Thread.Signal(W);...END;END P2;O szczegółach Moduli 3 i zasadach programowania współbieżnego w tym językumożna przeczytać w książce [NelsOl].4.1.8 Concurrent EuclidConcurrent Euclid został opracowany przez J. R. Cordy'ego i R. C. Holtaz Uniwersytetuw Toronto jako rozszerzenie języka Euclid [Lamp77] o mechanizmy umożliwiająceprogramowanie współbieżne. W nim właśnie napisano jądro systemu Tunis, który jest zgodnyz systemem operacyjnym Unix. Opis języka Concurrent Euclid oraz systemu Tunis zawieraksiążka [Holt83].W Concurrent Euclid monitor definiuje się jako typ, podobnie jak w Concurrent Pascalu.Nazwy procedur,i funkcji widocznych na zewnątrz są wymieniane na liście exportowej wnagłówku bloku monitora. Dopuszcza się w nim, aby między procesem aktywowanym przezoperację signal a procesem wywołującym tę operację do monitora wchodziły inne procesy. Niema też gwarancji, że procesy są wstrzymywane na zmiennej typu condition w kolejnościzgodnej z kolejnością wywołań. Możliwe jest także wstrzymywanie procesów w kolejcepriorytetowej przez wywołanie operacji wait z dwoma parametrami, przy czym drugi parametrjest wtedy liczbą naturalną określającą priorytet procesu, podobnie jak się to robi w PascaluPlus.Przykładowy monitor M ma w Concurrent Euclid następującą postać:var M: monitorexports (P1.P2)var z: integervar W: conditionprocedure Pl =imports (var z, var W)begin ...wait(W)... end Plprocedure P2 =imports (var z, var W)begin... signal(W)... end P2initiallyimports (var z)begin z := O endend {M} monitor4.1.9 Zestawienie67

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!