Lygiagretusis programavimas: Skirtumas tarp puslapio versijų

Ištrintas turinys Pridėtas turinys
Monro (aptarimas | indėlis)
Monro (aptarimas | indėlis)
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.
 
<nowiki>
package testas;
<verbatim>
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:
}
}
 
</verbatim>
</nowiki>
 
Paleidę galime įsitikinti, kad metodai gali įsiterpti vienas į kitą ir taip gauname netikėtus rezultatus. Monitorių galime panaudoti taip:
 
 
<nowiki>
...
<verbatim>
public synchronized static void keisti()
...
...
public synchronized static void keisti()
public synchronized static boolean arNulis()
...
...
public synchronized static boolean arNulis()
 
...
</verbatim>
</nowiki>
 
Išbandę matome, kad dabar jau monitoriai apsaugo kritinę sekciją ir metodai vienas į kitą neįsiterpia.