我是靠谱客的博主 舒服蛋挞,最近开发中收集的这篇文章主要介绍互斥量的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <iostream>
#include <windows.h>
using namespace std;
int g_nIndex = 0;
const int MAX_TIMES = 20;
DWORD g_dwTimes[MAX_TIMES];
HANDLE g_hMutex = NULL;
DWORD WINAPI FirstThread(LPVOID lpvThreadParm);
DWORD WINAPI SecondThread(LPVOID lpvThreadParm);
int main(int argc, char *argv[])
{
HANDLE hThreads[2];
g_hMutex = CreateMutex(NULL,FALSE,NULL);
hThreads[0] = CreateThread(0,0,FirstThread,0,0,0);
hThreads[1] =
CreateThread(0,0,SecondThread,0,0,0);
// 这里等待两个线程被触发,即两个线程都执行完毕了
WaitForMultipleObjects(2,hThreads,TRUE,INFINITE);
CloseHandle(hThreads[0]);
CloseHandle(hThreads[1]);
CloseHandle(g_hMutex);
for (int i = 0 ; i < g_nIndex ; ++i)
{
if (i % 8 == 0 && i != 0)
cout << endl;
cout << g_dwTimes[i] << " ";
}
cout << endl;
return 0;
}
DWORD WINAPI FirstThread(LPVOID lpvThreadParm)
{
BOOL fDone = FALSE;
DWORD dw;
while(!fDone)
{
dw = WaitForSingleObject(g_hMutex,INFINITE);
if (dw == WAIT_OBJECT_0)
{
//WaitForSingleObject返回值为WAIT_OBJECT_0表示当前线程可以访问互斥量保护的数据。
//在执行完WaitForSingleObject后,如果返回值为WAIT_OBJECT_0说明在执行该函数前,
//互斥量是有信号的,同时在执行完该函数后互斥量被设置成为无信号的了。
if (g_nIndex >= MAX_TIMES)
{
fDone = TRUE;
}
else
{
g_dwTimes[g_nIndex++] = GetTickCount();
}
//使用完互斥量保护的数据后,使用ReleaseMutex来使用互斥量内核对象变成有信号状态,
//这样其它的线程就可以访问这个互斥量保护的数据了。
ReleaseMutex(g_hMutex);
}
else
{
break;
}
}
return 0;
}
DWORD WINAPI SecondThread(LPVOID lpvThreadParm)
{
BOOL fDone = FALSE;
DWORD dw;
while(!fDone)
{
dw = WaitForSingleObject(g_hMutex,INFINITE);
if(dw == WAIT_OBJECT_0)
{
if (g_nIndex >= MAX_TIMES)
{
fDone = TRUE;
}
else
{
g_dwTimes[g_nIndex++] = GetTickCount();
}
ReleaseMutex(g_hMutex);
}
else
{
break;
}
}
return 0;
}

最后

以上就是舒服蛋挞为你收集整理的互斥量的使用的全部内容,希望文章能够帮你解决互斥量的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部