Generell erzwingt
Sleep einen Context Switch, weshalb ein
Sleep(0)
normalerweise äquivalent zu
TThread.Yield()
bzw. den darunterliegenden APIs
SwitchToThread und
NtYieldExecution 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.