MFC中关于CMutex类的学习

MFC中关于CMutex类的学习

最近在项目中要实现两个线程之间的同步,MFC中提供了4个类,分别是CMutex(互斥量)、CCriticalSection(临界区)、CEvent(事件对象)、CSemaphore(信号量)。有关这4个类的说明,大家可以参考微软官方文档:

CMutex 类 | Microsoft Learn

CEvent 类 | Microsoft Learn

CCriticalSection 类 | Microsoft Learn

CSemaphore 类 | Microsoft Learn

今天我们要用到的是CMutex类。下面我们用一个简单的实力来介绍:

新建一个控制台应用程序如下图:

并且添加如下代码

复制代码
#include <iostream>
#include <afxmt.h>
#include <thread>
#include <afxwin.h>
using namespace std;

CMutex g_Mutex;

int g_Count = 0;

void PrintfOddNum()
{
	while (g_Count < 100)
	{
		g_Mutex.Lock();
		//CSingleLock lock(&g_Mutex);
		if (g_Count % 2 == 1)
		{
			cout << "thr1:" << g_Count << endl;
			g_Count++;
		}
		//lock.Unlock();
		g_Mutex.Unlock();
	}
}

void PrintfEvenNum()
{
	while (g_Count < 100)
	{
		g_Mutex.Lock();
		//CSingleLock lock(&g_Mutex);
		if (g_Count % 2 == 0)
		{
			cout << "thr2:" << g_Count << endl;
			g_Count++;
		}
		//lock.Unlock();
		g_Mutex.Unlock();
	}
}

int main()
{
	thread th1(PrintfOddNum);
	thread th2(PrintfEvenNum);

	th1.join();
	th2.join();

	std::cout << "Hello World!\n";
}

这个测试项目主要实现两个线程分别打印100以内的奇数和偶数。

代码运行后的测试结果如下:

如上图,可以实现两个线程分别打印奇数和偶数。

欢迎大家一起交流学习。

相关推荐
Ma_Hong_Kai10 天前
带复选框的combox
c++·mfc
blog_wanghao11 天前
MFC: 使用相对路径读取文件位置
c++·mfc
清风wxy14 天前
Duilib_CEF桌面软件实战之Duilib编译与第一个界面程序
c++·笔记·ui·mfc
notfindjob14 天前
MFC动态加载图片
c++·mfc
苏比的博客17 天前
Windows MFC添加类,变量,类导向
c++·windows·mfc
yudiandian201417 天前
MFC - 使用 Base64 对图片进行加密解密
c++·mfc
yudiandian201417 天前
MFC - Picture Control 控件显示图片
c++·mfc
西哥写代码20 天前
基于dcmtk的dicom工具 第十三章 dicom文件导出bmp、jpg、png、tiff、mp4
c++·mfc·dicom·dcmtk·tiffopen·dipngplugin·dijpegplugin
西哥写代码24 天前
基于dcmtk的dicom工具 第十二章 响应鼠标消息实现图像的调窗、缩放、移动
c++·mfc·dicom·dcmtk·vs2017
西哥写代码24 天前
基于dcmtk的dicom工具 第十章 读取dicom文件图像数据并显示
c++·mfc·dcmtk·vs2017