注意:程序执行完,CloseHandle
#include <stdio.h>
#include <windows.h>#include <process.h>
static int g_test = 0;
HANDLE hMutex = NULL;
#define DEBUG_MUTEX
#ifdef DEBUG_MUTEX
#define GET_MUTEX() WaitForSingleObject(hMutex, -1)
#define FREE_MUTEX() ReleaseMutex(hMutex)
#else
#define GET_MUTEX()
#define FREE_MUTEX()
#endif
DWORD WINAPI ComProc1(void *p)
{
while(1)
{
GET_MUTEX();
g_test++;
printf ("1 ComProc1 %d\n", g_test);
FREE_MUTEX();
Sleep(1000);
}
}
DWORD WINAPI ComProc2(void *p)
{
while(1)
{
GET_MUTEX();
g_test++;
printf ("2 ComProc2 %d\n", g_test);
FREE_MUTEX();
Sleep(1000);
}
}
void main()
{
DWORD lpThreadId1 = 0;
DWORD lpThreadId2 = 0;
DWORD i = 0;
hMutex = CreateMutex (NULL, 0, "test_mutex");
if (hMutex == NULL)
{
printf ("CreateMutex error\n");
return;
}
CreateThread(NULL, 0, ComProc1, NULL, 0, &lpThreadId1);
CreateThread(NULL, 0, ComProc2, NULL, 0, &lpThreadId2);
//
while(i < 10000000)
{
++i;
Sleep(50);
}
CloseHandle (hMutex);
}