// testmutex.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include "windows.h" HANDLE m_hMutex; #include<list> using namespace std; list<int> vecInt; DWORD WINAPI ThreadFunc1(LPVOID lpParam) { while (1) { // printf("线程等待锁1\n"); int a = -1; DWORD dwRet = GetLastError(); if (0 != dwRet) { printf("线程结束1::%d\n",dwRet); break; } WaitForSingleObject(m_hMutex, INFINITE); if (vecInt.size()>0) { a = vecInt.front(); vecInt.pop_front(); printf("ThreadFunc1::%d\n", a); } ReleaseMutex(m_hMutex); } Sleep(5000); printf("1线程结束\n"); return 0; } DWORD WINAPI ThreadFunc2(LPVOID lpParam) { while (1) { printf("线程等待锁2\n"); WaitForSingleObject(m_hMutex, INFINITE); for (int i = 1; i < 20; i++) { vecInt.push_back(i); } printf("ThreadFunc2::%d\n",vecInt.size()); ReleaseMutex(m_hMutex); Sleep(10000); } Sleep(5000); printf("线程结束\n"); return 0; } int main(int argc, char* argv[]) { DWORD nStatus = 0; m_hMutex = CreateMutex(NULL, FALSE, L"cplusplus_me"); DWORD dwRet = GetLastError(); if (m_hMutex) { if (ERROR_ALREADY_EXISTS == dwRet) { printf("程序已经在运行中了,程序退出!\n"); WaitForSingleObject(m_hMutex, INFINITE); // CloseHandle(m_hMutex); // return 0; } } //else //{ // printf("创建互斥量错误,程序退出!\n"); // CloseHandle(m_hMutex); // return 0; //} // ReleaseMutex(m_hMutex); HANDLE handle = ::CreateThread(NULL, 0, ThreadFunc1,NULL,1024,&nStatus); // ::CreateThread(NULL, 0, ThreadFunc2, NULL, 1024, &nStatus); for(int i =0;i<5;i++) { DWORD dwRet = GetLastError(); if (0 != dwRet) break; printf("线程等待锁2\n"); WaitForSingleObject(m_hMutex, INFINITE); for (int i = 1; i < 20; i++) { vecInt.push_back(i); } printf("ThreadFunc2::%d\n", vecInt.size()); ReleaseMutex(m_hMutex); Sleep(1000); } CloseHandle(m_hMutex); WaitForSingleObject(handle,INFINITE); printf("end\n"); getchar(); return 0; }