AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Threads: Lesen einer globalen Ressource ist erlaubt?
Thema durchsuchen
Ansicht
Themen-Optionen

Threads: Lesen einer globalen Ressource ist erlaubt?

Ein Thema von Pfoto · begonnen am 5. Dez 2005 · letzter Beitrag vom 5. Dez 2005
Antwort Antwort
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Threads: Lesen einer globalen Ressource ist erlaubt?

  Alt 5. Dez 2005, 12:30
Hallo zusammen,

ich möchte endlich das Thema "Threads" vollständig verstehen lernen und obwohl ich schon das fabelhafte Tutorial von Luckie gelesen habe, möchte ich zur Sicherheit nochmal fragen:

Da ich mit meinen Threads auch auf globale Variablen, Konstante und Funktionen zugreifen möchte, stellt sich mir die Frage, ob ich auch reine Lese-Vorgänge mit CriticalSections absichern muss.

Bei Luckie im Tutorial steht:
Zitat:
Wie schon im Beispiel zu sehen war, muss jedem Codestück, welches auf eine gemeinsame
Ressource zugreift ein Aufruf von EnterCriticalSection vorangehen.
Schließt das also auch Bereiche ein, die ich nur lesen möchte?
Oder verhindert das Betriebssystem/die Hardware einen Fehler, selbst wenn mehrere Prozessoren auf ein und den selben Speicherbereich lesend zugreifen (möchten)?


Hoffe nicht, dass ich nur zu blind war, es in Luckies Tutorial zu finden...


So, schonmal vielen Dank!
Jürgen Höfs
Jürgen Höfs / picoly.de
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Threads: Lesen einer globalen Ressource ist erlaubt?

  Alt 5. Dez 2005, 18:32
Wenn überhaupt keiner schreibt, dann muss nichts synchronisiert werden.
Wenn aber einer schreibt und mehrere lesen, dann kann es natürlich passieren, dass Schreiben und Lesen gemischt werden und deswegen du fehlerhafte Daten lesen kannst.

Die Situation, dass beliebige viele Prozesse bzw. Threads auf eine Ressource lesend, aber nur einer schreibend, zugreifen darf, nennt sich Reader-Writer-Problem. Dafür sollte in der Literatur und im Netz Beispielimplementationen geben, da das ganze doch recht schwer verständlich ist.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Threads: Lesen einer globalen Ressource ist erlaubt?

  Alt 5. Dez 2005, 18:35
Du brauchst die Resource X nicht zu schützen, wenn:
1.) die Resource X vom Hauptthread erzeugt wird
2.) dann deine Arbeitsthreads gestartet werde
3.) die Arbeitsthreads die Resource nur lesen
4.) der Hauptthread beim Programmende sicherstellt, dass alle Arbeitsthreads vorher beendet wurden

Geschützt werden muss nur dann, wenn ein Thread lesend auf eine Resource zugreift, während ein anderer Thread (kann auch der Hauptthread sein), die Resource schliesst oder schreibt.

Das Lesen aus einer Resource darf den internen Zustand der Resource natürlich nicht verändern.
Beispiel
Ein Dateihandle hat als internen Zustand die Dateiposition (kann mit Seek gesetzt werden).
Das Lesen aus einer Datei ändert die Position -> also muss der Zugriff auf diese Resource geregelt werden.
Andreas
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Threads: Lesen einer globalen Ressource ist erlaubt?

  Alt 5. Dez 2005, 20:37
Ah! Ich danke Euch! Schon wieder was dazugelernt...
Jürgen Höfs
Jürgen Höfs / picoly.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz