互斥对象与多线程同步的有关问题

求助互斥对象与多线程同步的问题
[size=16px][/size]#include <WINDOWS.H>
#include <IOSTREAM.H>

DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);

int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hMutex=CreateMutex(NULL,FALSE,NULL);
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,0);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,0);
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(4000);
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
cout<<"thread1 sell tickets:"<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
cout<<"thread2 sell tickets:"<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}

[size=12px]对于上面的代码,有没有可能会出现这一种情况:由于线程1和2都在请求互斥对象,假如线程1请求到了互斥对象,然后执行其内部的代码,由于waitforsingleobject()存在于循环内部,当刚执行完这一句代码的时候,分配给线程1的时间片到了,然后线程2执行,由于现在线程1现在拥有互斥对象,所以程序不能执行,转而又执行线程1。会不会一直重复上面的情况,从而导致线程2 执行不了?即tickets全是油线程1卖出去的???希望大侠们帮帮忙,我没分,所以给不了你。。。不好意思。。。[/size]

------解决方案--------------------
else
break;
这可能会退出循环,这样,mutex就不会释放

当然有可能会
------解决方案--------------------
个人觉得,理论上存在,实际上不太可能,那概率估计比你买彩票中了5亿还低的多。
若不放心可以ReleaseMutex(hMutex);后sleep()下
------解决方案--------------------
else部分的break之前请先ReleseMutex释放互斥量