1、 Code
int Work()
{
while (m_lInterlockedData < 10)
{
InterlockedIncrement(&m_lInterlockedData);
Sleep(100);
}
printf("CInterlocked::Work end\n");
return 0;
}
BOOL RunThread()
{
CloseHandle((HANDLE)_beginthreadex(NULL, NULL, ThreadProc, this, NULL, NULL));
CloseHandle((HANDLE)_beginthreadex(NULL, NULL, ThreadProc, this, NULL, NULL));
CloseHandle((HANDLE)_beginthreadex(NULL, NULL, ThreadProc, this, NULL, NULL));
CloseHandle((HANDLE)_beginthreadex(NULL, NULL, ThreadProc, this, NULL, NULL));
CloseHandle((HANDLE)_beginthreadex(NULL, NULL, ThreadProc, this, NULL, NULL));
return TRUE;
}
int WorkEx()
{
while (TRUE)
{
EnterCriticalSection(&m_cs);
if (m_lInterlockedData < 10)
{
m_lInterlockedData++;
LeaveCriticalSection(&m_cs);
}
else
{
LeaveCriticalSection(&m_cs);
break;
}
Sleep(100);
}
printf("CInterlocked::Work end\n");
return 0;
}
注意,爲了不讓在臨近區中等待過久,故將Sleep(100) 放在LeaveCriticalSection() 之外。