example:
#define THREAD_INSTANCE_NUMBER 3
LONG g_fResourceInUse = FALSE;
LONG g_lCounter = 0;
HANDLE hMutex;
DWORD ThreadProc(void *pData)
{
int ThreadNumberTemp = (*(int*)pData);
WaitForSingleObject(hMutex, INFINITE);
cout << "ThreadProc: " << ThreadNumberTemp << " is running!" << endl;
ReleaseMutex(hMutex);
return 0;
}
int _tmain(int argc, _TCHAR* argv[]){
int i;
DWORD ID[THREAD_INSTANCE_NUMBER];
HANDLE h[THREAD_INSTANCE_NUMBER];
if ( (hMutex = CreateMutex(NULL, FALSE, FALSE)) == NULL )
{
cout << "Create Mutex error!" << endl;
return 0;
}
for (i = 0; i < THREAD_INSTANCE_NUMBER; i++)
{
WaitForSingleObject(hMutex, INFINITE);
h[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (void *)&ID[i], 0, &(ID[i]));
if (h[i] == NULL)
cout << "CreateThread error" << ID[i] << " " << i << endl;
else
cout << "CreateThread: " << ID[i] << " " << i << endl;
ReleaseMutex(hMutex);
}
WaitForMultipleObjects(THREAD_INSTANCE_NUMBER, h, TRUE, INFINITE);
cout << "Close the Mutex Handle!" << endl;
CloseHandle(hMutex); }
本文提供了一个使用互斥锁控制线程同步的C++代码示例,展示了如何创建线程并实现互斥操作以避免数据竞争。
3万+

被折叠的 条评论
为什么被折叠?



