Mutex互斥对象:
用于确保一个线程独占对一个资源的访问。假如有两个线程要访问一个全局变量,那么要用mutex互斥量,进程同步。
代码片段如下:
声明:
int g_TicketCount = 50; //两个线程g_thread1 和 g_thread2对全局变量g_TicketCount访问。
HANDLE g_Mutex;
HANDLE g_thread1;
HANDLE g_thread2;
定义对象:初始化
g_thread1 = CreateThread(nullptr, 0, ThreadProc1, nullptr, 0, nullptr);//CREATE_SUSPENDED,表示创建的线程先挂起,这个参数如果是0 ,表示立刻执行该线程
g_thread2 = CreateThread(nullptr, 0, ThreadProc2, nullptr, 0, nullptr);//CREATE_SUSPENDED,表示创建的线程先挂起,这个参数如果是0 ,表示立刻执行该线程
g_Mutex = CreateMutex(nullptr, false, nullptr);
线程的回调函数:
DWORD WINAPI ThreadProc1(LPVOID lpParma)
{
while (true)
{
WaitForSingleObject(g_Mutex, INFINITE);
if (g_TicketCount == 0)
break;
WCHAR msg[20] = { 0 };
swprintf_s(msg, 20, L"线程1买出的票是:%d\r", g_TicketCount--);
OutputDebugString(msg);
Sleep(500);
ReleaseMutex(g_Mutex);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParma)
{
while (true)
{
WaitForSingleObject(g_Mutex, INFINITE);
if (g_TicketCount == 0)
break;
WCHAR msg[20] = { 0 };
swprintf_s(msg, 20, L"线程2买出的票是:%d\r", g_TicketCount--);
OutputDebugString(msg);
Sleep(500);
ReleaseMutex(g_Mutex);
}
return 0;
}
结束时释放资源:
CloseHandle(g_thread1);
CloseHandle(g_thread2);
CloseHandle(g_Mutex);