yield: Don't lower thread priority, it leads to starvation

...and it's not required anymore to have the same effect as the original
code post-XP.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2017-03-08 17:44:15 +01:00
parent 994a4b7dcc
commit 51a993c266
1 changed files with 6 additions and 5 deletions

View File

@ -85,17 +85,18 @@ check_iovec (const struct iovec *iov, int iovcnt, bool forwrite)
void
yield ()
{
int prio = GetThreadPriority (GetCurrentThread ());
SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE);
/* MSDN implies that SleepEx will force scheduling of other threads.
/* MSDN implies that Sleep will force scheduling of other threads.
Unlike SwitchToThread() the documentation does not mention other
cpus so, presumably (hah!), this + using a lower priority will
stall this thread temporarily and cause another to run.
(stackoverflow and others seem to confirm that setting this thread
to a lower priority and calling Sleep with a 0 paramenter will
have this desired effect) */
have this desired effect)
CV 2017-03-08: Drop lowering the priority. It leads to potential
starvation and it should not be necessary anymore
since Server 2003. See the MSDN Sleep man page. */
Sleep (0L);
SetThreadPriority (GetCurrentThread (), prio);
}
/* Get a default value for the nice factor. When changing these values,