Lygiagretusis programavimas: Skirtumas tarp puslapio versijų
Ištrintas turinys Pridėtas turinys
Eilutė 16:
==Kritinių sekcijų pavyzdžiai==
Kaip sakoma, kol savo akimis nepamatai, nepatiki. Taigi paruošėme pavyzduką, kurį kiekvienas norintis gali išbandyti - tereikia Java kompiliatoriaus ir virtualio mašinos. Taigi pirmas atvejis - kritinė sekcija nesaugoma.
package testas;▼
class BendriDuomenys {▼
▲package testas;
▲class BendriDuomenys {
public static int skaicius = 0;
public static void keisti() {
eilutė 29 ⟶ 28:
}
}
class Gija1 extends Thread {
private long pradzia;
public void run() {
eilutė 39 ⟶ 38:
}
class Gija2 extends Thread {
private long pradzia;
public void run() {
eilutė 51 ⟶ 50:
}
public class Testas {
public static void main(String[] args) {
Gija1 gija1 = new Gija1();
eilutė 59 ⟶ 58:
}
}
Paleidę galime įsitikinti, kad metodai gali įsiterpti vienas į kitą ir taip gauname netikėtus rezultatus. Monitorių galime panaudoti taip:
...▼
public synchronized static void keisti()▼
▲...
...▼
▲public synchronized static void keisti()
public synchronized static boolean arNulis()▼
▲...
...▼
▲public synchronized static boolean arNulis()
▲...
Išbandę matome, kad dabar jau monitoriai apsaugo kritinę sekciją ir metodai vienas į kitą neįsiterpia.
|