15,471
社区成员
发帖
与我相关
我的任务
分享
int iTickets = 3;
HANDLE g_hMutex;
unsigned __stdcall Thread3( void * obj )
{
while ( TRUE )
{
//先进来
//Thread3先拥有g_hMutex
WaitForSingleObject( g_hMutex, INFINITE );
if ( iTickets > 0 )
{
cout << "Thread3: " << iTickets-- << endl;
}
else
{
ReleaseMutex( g_hMutex );
break;
}
}
return 0;
}
unsigned __stdcall Thread4( void * obj )
{
while ( TRUE )
{
//后进来
//需要等待Thread3释放g_hMutex,Thread4才能拥有g_hMutex
WaitForSingleObject( g_hMutex, INFINITE );
if ( iTickets > 0 )
{
cout << "Thread4: " << iTickets-- << endl;
}
else
{
ReleaseMutex( g_hMutex );
break;
}
}
return 0;
}
void Test_Mutex()
{
HANDLE hThread3 = (HANDLE)_beginthreadex( NULL, 0, Thread3, NULL, 0, NULL );
HANDLE hThread4 = (HANDLE)_beginthreadex( NULL, 0, Thread4, NULL, 0, NULL );
CloseHandle( hThread3 );
CloseHandle( hThread4 );
g_hMutex = CreateMutex( NULL, FALSE, NULL );
}
void Test_Mutex()
{
g_hMutex = CreateMutex( NULL, FALSE, NULL );
HANDLE hThread3 = (HANDLE)_beginthreadex( NULL, 0, Thread3, NULL, 0, NULL );
HANDLE hThread4 = (HANDLE)_beginthreadex( NULL, 0, Thread4, NULL, 0, NULL );
//这是等待线程3和4的结束,和死锁有什么关系?
WaitForSingleObject(hThread3, INFINITE);
WaitForSingleObject(hThread4, INFINITE);
CloseHandle( hThread3 );
CloseHandle( hThread4 );
}
#include <iostream>
#include <process.h>
using namespace std;
int iTickets = 4;
HANDLE g_hMutex;
unsigned __stdcall Thread3( void * obj )
{
while ( TRUE )
{
//ÏȽøÀ´
//Thread3ÏÈÓµÓÐg_hMutex
WaitForSingleObject( g_hMutex, INFINITE );
if ( iTickets > 0 )
{
cout << "Thread3: " << iTickets-- << endl;
}
else
{
ReleaseMutex( g_hMutex );
break;
}
ReleaseMutex( g_hMutex );
}
return 0;
}
unsigned __stdcall Thread4( void * obj )
{
while ( TRUE )
{
//ºó½øÀ´
//ÐèÒªµÈ´ýThread3ÊÍ·Åg_hMutex£¬Thread4²ÅÄÜÓµÓÐg_hMutex
WaitForSingleObject( g_hMutex, INFINITE );
if ( iTickets > 0 )
{
cout << "Thread4: " << iTickets-- << endl;
}
else
{
ReleaseMutex( g_hMutex );
break;
}
ReleaseMutex( g_hMutex );
}
return 0;
}
void Test_Mutex()
{
g_hMutex = CreateMutex( NULL, FALSE, NULL );
HANDLE hThread3 = (HANDLE)_beginthreadex( NULL, 0, Thread3, NULL, 0, NULL );
HANDLE hThread4 = (HANDLE)_beginthreadex( NULL, 0, Thread4, NULL, 0, NULL );
WaitForSingleObject(hThread3, INFINITE);
WaitForSingleObject(hThread4, INFINITE);
CloseHandle( hThread3 );
CloseHandle( hThread4 );
}
int main()
{
Test_Mutex();
return 0;
}