1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Buffer - Consumer Producer - Threads synchronisieren

  • poochie
  • 17. Januar 2011 um 15:51
  • Unerledigt
  • poochie
    4
    poochie
    Mitglied
    Punkte
    105
    Beiträge
    14
    • 17. Januar 2011 um 15:51
    • #1

    Hallo,
    hab wieder mal ne nette Aufgabe :D.
    Gegebn sind eine Klasse Producer, Consumer (beide runnable) und UnsynchronizedBuffer. Der Producer schreibt nach zufälliger Zeit (zehn mal in schleife) in einen gemeinsamen Buffer den Consumer nach zufälliger Zeit ausliest (zehn mal in schleife). Der Producer addiert diese Werte und gibt sie zum schluss aus. Buffer auch. Natürlich ist das ganze nicht synchronisiert und es kann sein dass Consumer z.b. zwei mal den gleichen wert liest. Wir sollen nun mit Hilfe von synchronized, die Methoden in der Buffer Klasse synchronisieren (get und set). Aber synchronized stellt ja nur sicher dass ein Thread auf den anderen wartet sollte dieser gerade eine synchronized Methode ausführen. Wie könnte ich die beiden zugriffe synchronisieren (im Buffer).

    Vielen Dank schon mal für die Hilfe

  • polymorph10
    5
    polymorph10
    Mitglied
    Reaktionen
    20
    Punkte
    270
    Beiträge
    50
    • 17. Januar 2011 um 16:46
    • #2

    Klassisches Producer-Consumer, sprich abwechselnd?

    Bsp.:

    Code
    public class MyBuffer 
    {
        private int counter;
    
        public MyBuffer()
        {
            this.counter = 0;
        }
    
        public synchronized void increase() throws InterruptedException 
        {
            while(counter > 0)
            {
                this.wait();
            }
    
            counter++;
            this.notify();
        }
    
        public synchronized int consume() throws InterruptedException
        {
            while(counter == 0)
            {
                this.wait();
            }
    
            int c = this.counter;
            this.counter = 0;
            this.notify();
            return c;
        }
    }
    Alles anzeigen

    Generell: sychronized stellt übrigens sicher, dass nur eine der synchronized-Methoden eines Objektes gleichzeitig ausgeführt werden kann, es gibt einen Lock auf das Objekt (this).

    http://www.iks.hs-merseburg.de/~uschroet/Literatur/Java_Lit/JAVA_Insel/javainsel_11_005.htm#t2t38

    Einmal editiert, zuletzt von polymorph10 (17. Januar 2011 um 16:50)

  • poochie
    4
    poochie
    Mitglied
    Punkte
    105
    Beiträge
    14
    • 17. Januar 2011 um 18:07
    • #3

    jou genau das wars, habs inzwischen selbst rausgefunden, danke trotzdem

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung