Einzelnen Beitrag anzeigen

Delphi-Laie

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

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

  Alt 25. Apr 2015, 16:49
Das ließ mir keine Ruhe, und mithin forschte ich an diesem Phänomen weiter (Programmhänger tauchen gelegentlich in meinem Sortierkino beim parallelen (Multithreading-)Mergesort unter besagtem Windows XP auf einem Zweiprozessorcomputer auf: Es werden gewisse Synchronizes zwar aufgerufen, jedoch kommt der Code nicht in der synchronisierten Prozedur an, und zwar auch dann nicht, wenn dieser Aufruf als kritischer Abschnitt gekapselt ist.

Den Grund für dieses (Fehl-?)Verhalten konnte ich zwar nicht finden, aber den Fehler wenigstens eingrenzen: Er scheint nur bei Compilaten mit Delphi 2-4 aufzutreten, ab Delphi 5 konnte ich diesen Fehler nicht reproduzieren. Da sogar die Lazarus-Compilate wie gewünscht reagieren (Freepascal ist ja gegenüber Fehlern besonders empfindlich), war mein Verdacht ohnehin in diese Richtung vorhanden. Mit Compilaten der Delphis 5-7 und XE2 (Turbo-Delphi spare ich mir, dafür extra zu installieren) funktioniert es problemlos.

Und ab Delphi 5 muß eben auch kein "sleep(0)" den kritischen Abschnitten mehr nachgeschaltet oder zwischen solche kritische Abschnitte eingefügt werden, es funktioniert dennoch.

Dennoch fände ich es interessant, wenn Luckie sich mal dazu äußern würde, denn in seinem Beispiel in der umfangreichen Anleitung ist ja auch dieser Befehl nachgeschaltet. Oder er weiß auch nichts anderes als das schon genannte dazu zu sagen.

Geändert von Delphi-Laie (25. Apr 2015 um 17:12 Uhr)
  Mit Zitat antworten Zitat