Jeg kan ikke rigtigt se forskelen immellem semaforer og monitorer !!
eksempel 1 - semafor:
public class Semafor { private int counter;
public Semafor() { this( 1 ); }
public Semafor( int n ) { counter = n; }
public synchronized void down() { while ( counter == 0 ) try { wait(); } catch ( InterruptedException e ) { // ignore }
counter--; }
public synchronized void up() { if ( counter == 0 ) notify();
counter++; } }
ekempel 2 - monitor:
public class A { ...
public void metodeA() { ... }
public synchronized void metodeB { ... }
public void metodeC() { ... }
public synchronized void metodeD { ... } }
"Med det reserverede ord: synchronized angiver man, at de to metoder: metodeB og metodeD er i klassens monitor." ----------- så mit spørgsmål er: Har jeg i eksempel 1. både en semafor og en monitor, fordi der er ordet "synchronized".
semafor er jo ikke direkte understøttet i sproget så hvis du som i eksempelt vil lave en semafor må du jo konstruere det ud fra hvad der er muligt i java
Kan man gøre det på andre måder, Arne. En semafor er netop karakteriseret ved at den tilhørende proces skal vente pænt i en kø, indtil det bliver dens "tur".
Semaforerer er primtive i forhold til en monitor, men begge indeholder en kø. I eksemplet ovenfor "genbruger" man bare køen for monitoren til en semafor.
Men det er "snyd" i den forstand at man ikke har lavet en semafor. Man har lavet noget der opfører sig som en semafor, men er sluppet for en masse bøvl da køen allerede er der. Li'som forloren hare.
I en monitor (lavet ved synchronized) kan der kun være en proces ad gangen
Benyttes semaphor klasser fx som jeg tidligere gav dig, så kan der tillades at flere processer kan passere semaphoren alt afhængig af hvor mange man laver i konstruktoren:
public Semafor( int n ) { counter = n; }
new Semafor(3) vil fx gøre at 3 processor kan komme til den kode der beskyttes af semaforen.
Tungen? Den har nu aldrig hjuplet mig i den situation.
Men hjernen bør man ikke koble fra. For der kan jo tænkes situationer hvor netop wait/notify er nødvendige for at løse problemet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.