Avatar billede guda Nybegynder
10. maj 2003 - 16:45 Der er 4 kommentarer og
3 løsninger

semaforer og monitorer i java

Hvordan implementerer man en semafor og monitor i java!!!????

har i nogle ekempler!!!?
Avatar billede riversen Nybegynder
10. maj 2003 - 16:49 #1
www.docjava.dk
under multiprogrammering
Avatar billede arne_v Ekspert
10. maj 2003 - 16:50 #2
Det gør du ikke eksplicit.

Java laver det for dig implicit.

Forestil dig koden:

private StringBuffer sb1;
private StringBuffer sb2;

public void append(String s) {
  sb1.append(s);
  sb2.append(s);
}

hvis den skal gøres thread safe så laver du bare:

private StringBuffer sb1;
private StringBuffer sb2;

public void append(String s) {
  synchronized(sb) {
      sb1.append(s);
      sb2.append(s);¨
  }
}
Avatar billede arne_v Ekspert
10. maj 2003 - 16:52 #3
Eller:

private StringBuffer sb1;
private StringBuffer sb2;

public synchronized void append(String s) {
  synchronized(sb) {
      sb1.append(s);
      sb2.append(s);¨
  }
}
Avatar billede arne_v Ekspert
10. maj 2003 - 17:52 #4
Det sidste er dobbelt - skulle kun have været:

private StringBuffer sb1;
private StringBuffer sb2;

public synchronized void append(String s) {
  sb1.append(s);
  sb2.append(s);¨
}
Avatar billede conrad Nybegynder
10. maj 2003 - 20:05 #5
Jeg har ikke selv skrevet følgende klasse, men har fået det i forbindelse med et kursus

public class Semaphore {

  private int s = 0;

  public Semaphore(int s0) {
    if (s0 >= 0) s = s0;
  }

  public synchronized void Wait() {
    while (s == 0) {                              // Busy-wait semantics
      try {
        wait();
      } catch (InterruptedException ie) {}
    }
    s--;
  }

  public synchronized void Signal() {
    s++;
    notify();
  }

  public void P() {Wait();}          // Aliases
  public void V() {Signal();}

}
Avatar billede guda Nybegynder
10. maj 2003 - 22:39 #7
mange tak allesammen
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester