2 weileshenghuo1 weileshenghuo1 于 2014.08.30 17:55 提问

孙鑫视频第15章,多线程的创建,用互斥机制模拟火车票售票,我的问题,望大神指点

问题:当我设的总票数超过298时(比如500,1000),我的票都是从第298张开始卖的,正常的应该是总票数是多少张,就是从多少张开始卖的吧,当总票数小于298时,就是正常卖票,下面是我的代码,和运行结果的图片(当票数为500时),我的编译环境是vs 2008请大神指点
#include
#include
using namespace std;
DWORD WINAPI ThreadFun1(
In LPVOID lpParameter
);
DWORD WINAPI ThreadFun2(
In LPVOID lpParameter
);
static UINT tickets=500;
HANDLE hMutex;

void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,ThreadFun1,NULL, 0,NULL);
hThread2=CreateThread(NULL,0,ThreadFun2,NULL, 0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
/*while(index++<1000)
cout<<"Main Thread is running\n";*/
hMutex=CreateMutex(NULL,FALSE,NULL);
Sleep(4000);
//Sleep(10);
}
DWORD WINAPI ThreadFun1(
In LPVOID lpParameter
)
{
/*while(index++<1000)
cout<<"Thread1 is running\n";*/

while(TRUE)
{
    WaitForSingleObject(hMutex,INFINITE);
    if(tickets>0)
    {
        cout<<"Thread1:"<<tickets--<<'\n';
        /*puts("Thread1:");
        printf("%d",tickets);
        tickets--;*/ 
    }
    else
        break;
    ReleaseMutex(hMutex);
}

return 0;

}
DWORD WINAPI ThreadFun2(
In LPVOID lpParameter
)
{
/*while(index++<1000)
cout<<"Thread1 is running\n";*/

while(TRUE)
{
    WaitForSingleObject(hMutex,INFINITE);
    if(tickets>0)
        cout<<"Thread2:"<<tickets--<<'\n';
    /*{
    puts("Thread2:");
    printf("%d",tickets);
    tickets--;
    }*/
    else
        break;
    ReleaseMutex(hMutex);
}

return 0;

}
控制台运行结果最顶端部分:
CSDN移动问答
控制台运行最下面部分:
CSDN移动问答

Csdn user default icon
上传中...
上传图片
插入图片