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

Threadsichere Queue bei Zugriff aus 2 Threads

  • Volker83
  • 11. November 2009 um 14:08
  • Unerledigt
  • Volker83
    3
    Volker83
    Mitglied
    Punkte
    50
    Beiträge
    7
    • 11. November 2009 um 14:08
    • #1

    Hallo
    ich schreibe gerade eine Bibliothek die Images bekommt sie weiterverarbeitet und wieder zurück gibt.
    Die Images sollen vom aufrufenden Programm in einer BMP-Queue gelegt werden, von da wird die Bibliotheks-Komponente die Images wieder herraus nehmen um sie zu bearbeiten. Das rausnehmen und reinlegen in die Queue wird in 2 seperaten Threads getan. D.h. zur selben Zeit in der etwas rausgenommen wird kann es sein, dass der andere Thread auf die Queue zugreift und etwas reinlegen will.

    Wie mache ich die Queue Threadsicher? Ich habe gelesen dass man den Zugriff während einer Zeit durch eine LocVar blockieren kann, oder mit Hilfe der Synchronized-Methode einer anderen Queue organiseren kann. Wo ist der Unterschied und welche der Lösungen ist zu empfehlen?

  • spinball
    11
    spinball
    Mitglied
    Reaktionen
    67
    Punkte
    1.192
    Beiträge
    223
    • 11. November 2009 um 14:30
    • #2
    Zitat

    LocVar

    davon ist abzuraten

    Zitat

    Synchronized-Methode

    mach das

    Code
    thread-sichere bmp-queue pseudo-code {
         synchronisierte liste von bildern;
    
    
         synchrones entnehmen () {
              // liste für andere threads sperren
              // entnehmen
              // liste wieder freigeben
         }
    
    
         synchrones einfügen (bmp bild) {
              // liste für andere threads sperren
              // einfügen
              // liste wieder freigeben
         }
    }
    Alles anzeigen

    Zum Lesen: http://www.complang.tuwien.ac.at/franz/objektor…t09-1seitig.pdf Kapitel "Nebenläufige Programmierung" ab Seite 142.

  • Volker83
    3
    Volker83
    Mitglied
    Punkte
    50
    Beiträge
    7
    • 11. November 2009 um 14:59
    • #3

    Danke für den schnellen Rat, das Script finde ich auch super.

  • tobias
    8
    tobias
    Mitglied
    Reaktionen
    3
    Punkte
    688
    Beiträge
    136
    • 11. November 2009 um 15:04
    • #4

    Geht es hier jetzt um C# oder Java (bzw. ist mit synchronized-Methode das SynchronizationAttribute gemeint)?
    Für C# ist noch http://www.albahari.com/threading/part2.aspx hilfreich.

  • Volker83
    3
    Volker83
    Mitglied
    Punkte
    50
    Beiträge
    7
    • 11. November 2009 um 15:49
    • #5

    Es geht um C# und es ist die Queue.Synchronized-Methode gemeint. Bei der ich mir nicht ganz sicher bin was sie eigentlich macht.

  • tdanecker
    3
    tdanecker
    Mitglied
    Reaktionen
    4
    Punkte
    74
    Beiträge
    12
    • 11. November 2009 um 20:08
    • #6

    Queue.Synchronized macht einfach um alle Methoden-Aufrufe ein lock.
    Ich würd's aber eher selber machen...

    Code
    lock (queue)
    {
      queue.Dequeue/Enqueue();
    }

    Fachschaft Informatik

  • 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

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung