Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

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

  Alt 24. Apr 2015, 17:02
Generell erzwingt MSDN-Library durchsuchenSleep einen Context Switch, weshalb ein Sleep(0) normalerweise äquivalent zu TThread.Yield() bzw. den darunterliegenden APIs MSDN-Library durchsuchenSwitchToThread und MSDN-Library durchsuchenNtYieldExecution ist.

Wenn ein Thread frequentiert eine Critical Section betritt und verlässt (wenige Instructions / CPU Ticks zwischen Leave und Enter), sollte man nach dem Verlassen yielden, um dem Scheduler des Betriebssystems die Möglichkeit zu geben direkt einen anderen Thread auszuführen. Macht man dies nicht, kann es zu Starvation kommen. Praktisch alle aktuellen Betriebssysteme vergeben allerdings pro Thread auch ein Timeout, nach dessen Auslaufen ein Context Switch erzwungen wird. Yielden kann je nach Anwendungszweck trotzdem zu Performancesteigerung führen und eventuell Bottlenecks / Starvation eindämmen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat