Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1.
- private int a;
- public synchronized void prideti(int x) {
- a = a + x;
- }
- public synchronized void atimti(int x) {
- a = a - x;
- }
- public synchronized void spausdinti() {
- System.out.println(a);
- }
- Kuomet parašoma synchronized, tuomet metodas elgiasi kaip monitorius – jis neleidžia daug gijų vienu
- metu redaguoti bendrą resursą.
- 2.
- private int a;
- public synchronized void prideti(int x) {
- try {
- while (a>=100)
- wait();
- } catch (InterruptedException e) {
- }
- a = a + x;
- notifyAll();
- }
- public synchronized void atimti(int x) {
- try {
- while (a<=0)
- wait();
- } catch (InterruptedException e) {
- }
- a = a - x;
- notifyAll();
- }
- try{} bloke aprašoma sąlyginė sinchronizacija. Čia gija laukia, kol norimas resursas pakis taip, kad galėtų
- toliau vykdyti savo dalį.
- notifyAll() pažadina visas gijas, kurioms reikia prieiti prie naujos reikšmės. Jeigu tokių nėra – nieko
- nedaroma.
- 3. Norint sudauginti matricą su vektoriumi lygiagrečiai, galima uždavinį padalinti į tiek dalių, kiek yra
- matricos stulpelių/vektoriaus eilučių. Kad būtų galima sandauga, reikia kad matricos stulpelių skaičius
- sutaptų su vektoriaus eilučių skaičiumi. Naudojant kanalus, siunčiamas sandaugos uždavinys Gavėjui.
- Kuomet jis ši uždavinį išsprendžia, persiunčia procesui, kuris gautus dalinius rezultatus sudeda į bendrą.
- 4. Skaitytojai – rašytojai. Lygiagretumo problema – kelių gijų bandymas prieiti prie resurso vienu metu.
- Problema kyla kuomet resursas pakeičiamas viduryje skaitymo ar rašymo. Jeigu skaitymo metu pakinta
- reikšmė, galutinis programos rezultatas taip pat gali pakisti. Dėl to reikia naudoti monitorius, kad tik
- viena gija galėtų atlikti veiksmus su tuo resursu.
- 5. Atominiai veiksmai (tokie kaip x++, ++x, x--, --x) dažniausiai įvykdomi labai greitai. Tačiau atominio
- veiksmu metu, vykdoma tik viena operacija visoje programoje (vykdo tik viena gija vienu metu). Dėl to
- lygiagreti programa, kurios metu vykdomi procesai P1, P2, P3, galima vykdymo seka yra tokia
- (priklausomai kuri gija anksčiau pradėjo darbą): v11, v21, v31 (bet kokia tvarka), tuomet v12, v22, v32
- (bet kokia tvarka).
Advertisement
Add Comment
Please, Sign In to add comment