Einzelnen Beitrag anzeigen

Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: LeaveCriticalSection: Warum das nachfolgenden sleep(0)?

  Alt 24. Apr 2015, 13:01
Das interessiert mich auch. Es scheint generell einen "stabilisierenden" Effekt zu haben.

In Luckies Script "Threads mit Delphi" ist auch ein solches sleep(0) hinter LeaveCriticalSection enthalten, leider steht dort nicht, warum.

Mit Delphi-4-Compilaten habe ich ohne dieses sleep(0) die meisten Probleme, aber nur auf Windows XP mit Zweikernprozessor. Delphi-2-Compilate sind ohne dieses sleep(0) stabiler, aber auch nicht ganz fehlerfrei. Mit diesem sleep(0) ist es mit den Delphi-2- und Delphi-4-Compilaten besser, aber auch nicht völlig stabil.

Überhaupt keine Probleme ohne dieses sleep(0) gibt es auf Einprozessorcomputern, mit Lazarus-Compilaten (!) auf besagtem 2-Kern-Windows-XP und mit allen Compilaten auf Windows 7 und 8.1.

Ob es unter Windows 2000 und NT auf 2- oder Mehrkernprozessoren problematisch ist, kann ich derzeit leider nicht prüfen.

Was auch gar nicht funktioniert, ist, zwei kritische Abschnitte ohne zwischengeschaltetes sleep(0) sequentiell auszuführen. Zwischen LeaveCriticalSection und nachfolgendem EnterCriticalSection sollte mindestens ein sleep(0) stehen.

Ergänzung: Aus demselben Quelltext XE2-Compilate (32 Bit) generiert, funktionieren diese auf dem Zweiprozessoren-XP fehlerfrei, und zwar sowohl mit als auch ohne hintenangestelltes sleep(0). Merkwürdig...

Geändert von Delphi-Laie (24. Apr 2015 um 13:28 Uhr)
  Mit Zitat antworten Zitat