AGB  ·  Datenschutz  ·  Impressum  







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

Multithreading (Access Violation)

Ein Thema von exchange · begonnen am 18. Nov 2016 · letzter Beitrag vom 30. Nov 2016
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Multithreading (Access Violation)

  Alt 21. Nov 2016, 11:36
Darf man einen Thread nicht nacheinander ausführen? Einzelnd funktionieren die Threads auch.
Stell Dir vor, Du hast einen Thread, der 5 mal I := I + 1 ausführt und einen zweiten, der 5 mal I := I - 1 ausführt. Beide Threads brauchen ca. 1/2 Sekunde dafür.

Wenn Du Thread 1 startest , eine Sekunde wartest und Thread 2 ausführst, ist I wie vor den Threads 0.

Wenn Du beide Threads unmittelbar nacheinander ausführst, sollte eigentlich ja auch 0 rauskommen. Tut es aber nicht zwangsläufig.

"I := I + 1;" wird in mehreren CPU-Zyklen ausgeführt:

Merke Wert von I
Merke 1
Addiere beide Zahlen
Schreibe Ergebnis in I

Analog wird für Thread 2 folgendes getan:

Merke Wert von I
Merke 1
Subtrahiere Zahl2 von Zahl1
Schreibe Ergebnis in I

Wenn beide Threads gleichzeitig laufen bestimmt Windows, wann welcher Thread Arbeitszeit bekommen soll. Dazu wird z.B. Thread1 unterbrochen und Thread2 bekommt Arbeitszeit.

Dann passiert u.U. folgendes:

(Thread1)
Merke Wert von I
Merke 1
Addiere beide Zahlen
-->(Thread2)
Merke Wert von I
Merke 1
Subtrahiere Zahl2 von Zahl1
Schreibe Ergebnis in I
<--(weiter in Thread1)
Schreibe Ergebnis in I

Die Arbeit von Thread2 wird somit im Ergebnis nicht berücksichtigt.
Als Ergebnis kann alles zwischen -5 bis +5 raus kommen.


Wenn nicht nur einfache Integervariablen geteilt werden kann es zu weitaus schwerwiegenderen Fehlern bis hin zu kompletten Abstürzen kommen.

Man muss also darauf achten, dass gemeinsame Ressourcen gegen kritische gemeinsame Zugriffe abgesichert werden.


[EDIT] Das nur als grundsätzliche Anmerkung. Ob im genannten Beispiel so ein Problem vorliegen kann, kann ich nicht beurteilen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (21. Nov 2016 um 11:48 Uhr)
  Mit Zitat antworten Zitat
 


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 04:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz