vc++深入详解中的多线程例子,在多核CPU下出错分析。该怎么解决

vc++深入详解中的多线程例子,在多核CPU下出错分析。
C/C++ code

#include <WINDOWS.H>
#include <IOSTREAM>
using namespace std;
/*
 * 在单核单CPU下正常运行
 */
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);

int tickets = 100;
HANDLE g_hEvent;
void main()
{
    HANDLE hThread1,hThread2;
    hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    
    g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
    SetEvent(g_hEvent);

    Sleep(4000);
    CloseHandle(g_hEvent);
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
    while(TRUE)
    {
        WaitForSingleObject(g_hEvent,INFINITE);
        //ResetEvent(g_hEvent);
        if (tickets > 0)
        {
            Sleep(1);
            cout<<"Thread1 sell ticket:"<<tickets--<<endl;
        }
        else
            break;
        SetEvent(g_hEvent);
    }
    return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
    while(TRUE)
    {
        WaitForSingleObject(g_hEvent,INFINITE);
        //ResetEvent(g_hEvent);
        if (tickets > 0)
        {
            Sleep(1);
            cout<<"Thread2 sell ticket:"<<tickets--<<endl;
        }
        else
            break;
        SetEvent(g_hEvent);
    }
    return 0;
}


在多核cpu下运行结果出错。执行结果如下:


Thread1 sell ticTkherte:ad120 0s
ell ticket:99
Thread1 sell tickTehtr:e9a8d
2 sell ticket:97
Thread1 sell tickeTth:r9e6a
d2 sell ticket:95
Thread1 sell ticket:94
Thread2 sell tickeTth:r93e
ad1 sell ticket:92
Thread2 sell tickTehtr:e9a1d
1 sell ticket:90
Thread2 sell ticket:8T9
hread1 sell ticket:88
Thread2 sell tickTehtr:e8a7d
1 sell ticket:86
Thread2 sell tickTehtr:e8a5d1
 sell ticket:84
TThhrreeaadd12 sseellll ttiicckkeett::8832

TThhrreeada1d 2s eslell lt iticckkeett::8810

TThhreraeda1d 2s eslell lt itcikcekte:t7:97
8
TThhrreeaadd12 sseellll ttiicckkeett::7776

Thread1 sell tickeTth:r7e5a
d2 sell ticket:74
Thread1 sell ticket:73
Thread2 sell ticket:72
Thread1 sell tickeTth:r7e1a
d2 sell ticket:70
Thread1 sell ticket:69
Thread2 sell ticket:68
Thread1 sell tickeTth:r6e7a
d2 sell ticket:66
Thread1 sell ticket:65
Thread2 sell ticket:64
Thread1 sellT htriecakd2e ts:e6l3l
 ticket:62
TThhrreeaadd12 sseellll ttiicckkeett::6610

Thread1 sell tickTehtr:e5a9d
2 sell ticket:58
Thread1 sell ticket:57
Thread2 sell ticket:56
Thread1 sell ticket:55
Thread2 sell ticketT:h5r4
ead1 sell ticket:53
Thread2 sell ticket:52
Thread1 sell tickeTth:r5e1a
d2 sell ticket:50
Thread1 sell ticket:49
Thread2 sell ticket:48
Thread1 sell ticket:47
Thread2 sell ticket:46T
hread1 sell ticket:45
Thread2 sell tickTehtr:e4a4d
1 sell ticket:43
Thread2 sell ticket:42
Thread1 sell tickTehtr:e4a1d
2 sell ticket:40
Thread1 sell ticket:39
Thread2 sell ticket:38
Thread1 sell ticketT:h3r7e
ad2 sell ticket:36
Thread1 sell ticket:35
Thread2 sell tickTehtr:e3a4d
1 sell ticket:33
Thread2 sell tickTehtr:e3a2d
1 sell ticket:31
Thread2 sell ticket:30
Thread1 sell ticket:29
Thread2 sell ticket:28
Thread1 sell ticket:27
Thread2 sell tickeTth:r2e6a
d1 sell ticket:25
Thread2 sell ticket:24
Thread1 sell ticket:23
Thread2 sell tickTehtr:e2a2d
1 sell ticket:21
Thread2 sell ticket:20
Thread1 sell ticket:19
Thread2 sell ticket:T1h8r
ead1 sell ticket:17
Thread2 sell ticket:16
Thread1 sell tickeTth:r1e5a
d2 sell ticket:14
Thread1 sell ticket:13
Thread2 sell ticket:1T2h
read1 sell ticket:11
Thread2 sell ticket:10