AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads, TStringlist und CriticalSection

Ein Thema von kng · begonnen am 18. Apr 2008 · letzter Beitrag vom 18. Apr 2008
Antwort Antwort
kng

Registriert seit: 6. Feb 2008
25 Beiträge
 
#1

Threads, TStringlist und CriticalSection

  Alt 18. Apr 2008, 00:33
Moin,

Ich habe ein Programm, das mehrere Threads startet, die auf eine globale TstringList zugreifen.
(Es wird nur gelesen, nicht gelöscht, eingefügt oder geschrieben.)
Funktioniert auch ganz gut.

Hier ein Beispiel, wie es bei mir ungefähr aussieht:
Delphi-Quellcode:
var list:tstringlist;

procedure mythread;
var i:integer; s:string;
begin
for i:=0 to pred(list.count) do
begin
  s:=list[i];
  //"s" verarbeiten
end;
end;

procedure startthreads;
var i:integer; c:cardinal;
begin
for i:=1 to 20 do
  beginthread(nil,0,@mythread,nil,0,c);
end;
"list" enthält ~ 20000 Einträge.
Dann habe ich gehört, dass ich ich die komplette For-Schleife in eine CriticalSection schreiben muss.

Ist das wirklich nötig?
Es funktioniert ja auch ohne... und würde den Vorgang doch eig. nur unnötig verlangsamen oder?

Oder können ohne CriticalSection sonst noch andere Probleme auftreten?
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Threads, TStringlist und CriticalSection

  Alt 18. Apr 2008, 05:14
Zitat von Die Delphi-Hilfe ©Borland:
Wenn der Schutz des globalen Speichers in einem kritischen Abschnitt implementiert wird, kann immer nur ein Thread auf den geschützten Speicher zugreifen. Ein solcher umfassender Schutz ist aber häufig gar nicht nötig. Ein typisches Beispiel dafür sind Objekte oder Variablen, auf die zwar viele Lesezugriffe durchgeführt werden, denen aber nur sehr selten ein Wert zugewiesen wird. Wenn mehrere Threads gleichzeitig Lesezugriffe auf denselben Speicherbereich ausführen, besteht keine Gefahr eines Konflikts. Kollisionen sind nur möglich, wenn ein Thread einen Schreibzugriff ausführt.
Siehe auch: TMultiReadExclusiveWriteSynchronizer-Objekte in der OH
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
kng

Registriert seit: 6. Feb 2008
25 Beiträge
 
#3

Re: Threads, TStringlist und CriticalSection

  Alt 18. Apr 2008, 11:21
Zitat von chaosben:
Zitat von Die Delphi-Hilfe ©Borland:
Wenn der Schutz des globalen Speichers in einem kritischen Abschnitt implementiert wird, kann immer nur ein Thread auf den geschützten Speicher zugreifen. Ein solcher umfassender Schutz ist aber häufig gar nicht nötig. Ein typisches Beispiel dafür sind Objekte oder Variablen, auf die zwar viele Lesezugriffe durchgeführt werden, denen aber nur sehr selten ein Wert zugewiesen wird. Wenn mehrere Threads gleichzeitig Lesezugriffe auf denselben Speicherbereich ausführen, besteht keine Gefahr eines Konflikts. Kollisionen sind nur möglich, wenn ein Thread einen Schreibzugriff ausführt.
Siehe auch: TMultiReadExclusiveWriteSynchronizer-Objekte in der OH
Vielen Dank, da bin ich beruhigt.
  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 11:27 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