T
_xerxes schrieb:
void EnterCoutSection(void)
{
while(true)
{
if(!CoutMutex)
{
CoutMutex = true;
break;
}
Sleep(5);
}
}
void LeaveCoutSection(void)
{
CoutMutex = false;
}
Lass dir sowas bloß nicht aufschwätzen! Wenn dein Thread genau zwischen if(!CoutMutex) und CoutMutex=true unterbrochen wird, und zufällig gerade ein anderer Thread ebenfalls CoutMutex sperren will, dann hast du zwei Threads gleichzeitig in dem geschützten Bereich herumschreiben. Wenn du unbedingt etwas Hausgemachtes willst, also keine CRITICAL_SECTION verwenden willst, dann bitte etwas in dieser Art:
LONG CritSect = FALSE;
void EnterCoutSection()
{
while(InterlockedExchange(&CritSect, TRUE) != FALSE)
Sleep(0);
}
void LeaveCoutSection()
{
InterlockedExchange(&CritSect, FALSE);
}