两个线程,线程1,将变量g__value++,然后 触发事件,sleep(500).线程2,接收事件,打印变量值。 很简单的一个小程序,但我发现 先SetEvent()与先Sleep(),出来的结果不一样。
DWORD WINAPI ThreadSend(LPCVOID pParam)
{
while(1)
{
//InterlockedIncrement((LPLONG)&g_value);
g_value++;
SetEvent(g_hEvent);
Sleep(500); //这两条语句顺序相反,先sleep再发信号则,没有g_value=1的情况
}
return 0;
}
DWORD WINAPI ThreadRecv(LPCVOID pParam)
{
while(1)
{
WaitForSingleObject( g_hEvent,INFINITE);
printf("g_value:%d\n",g_value);
//ResetEvent(g_hEvent);
}
return 0;
}
执行结果是
g_value=0
g_value=1
g_value=2
g_value=3
但是,先sleep再SetEvent(),结果是
g_value=0
g_value=2
g_value=3
g_value=4
就是没有1 这是为什么呢?