互斥体CMutex的使用
互斥体CMutex的使用
互斥体是CMutex类的对象,也只允许一个线程占有某个共享资源,以保护独占式共享资源。因此,互斥体的使用方法与临界段的使用方法极为相似,所不同的是临界段只能在同一个进程中对线程进行同步,而互斥体可以用在不同的进程中进行线程同步控制。
CMutex类的构造函数原型为:
BOOL bInitiallyOwn /* = FALSE */, //用来指定互斥体对象初始状态是锁定(TRUE)还是非锁定(FALSE)
LPCTSTR lpszName /* = NULL */, //用来指定互斥体的名称
LPSECURITY_ATTRIBUTES lpsaAttribute /* = NULL */ //为一个指向SECURITY_ATTRIBUTES结构的指针
)
该对象的使用方法与临界段对象的使用方法相似,在线程中获得互斥体对象可以调用成员函数Lock(),需要交出互斥体对象时,调用成员函数UnLock()。
示例:编写一个应用程序,实现进程间线程的同步。
1.创建单文档应用程序;
2.在视图类的实现文件定义一个互斥体对象:
3.在视图类的实现文件中定义线程函数:
{
mutexObj.Lock();
LPTSTR pMessage = _T("Thread1 is started");
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
mutexObj.Unlock();
return 0;
}
4.在视图类的鼠标左键消息函数里面添加如下:
{
AfxBeginThread(MessageThread1, _T("Thread is started"));
CView::OnLButtonDown(nFlags, point);
}
启动程序的两个实例(运行两个此程序),单击第一个实例的窗口,即启动线程并在线程中锁定互斥体,因此在用鼠标单击第二个实例的窗口时,会没有任何反应,因为第二个实例的线程没有得到互斥体。
程序运行结果如图:
参考资料:
互斥体CMutex的使用相关推荐
- boost 线程、互斥体、条件变量
1.任何技术都是针对特定场景设计的,也就是说,为了解决某个问题而设计的. 2.考虑下面一种场景:一个小旅馆,只有一个卫生间,有清洁人员,店主人,和旅客.卫生间用完之后,就会自动锁闭,必须取钥匙,才能进 ...
- CreateMutex创建互斥体可以用于只运行进程的一个实例
CreateMutex 作用 找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体.CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为 VC声明 HANDLE ...
- linux 内核互斥体,Linux 内核同步(六):互斥体(mutex)
互斥体 互斥体是一种睡眠锁,他是一种简单的睡眠锁,其行为和 count 为 1 的信号量类似.(关于信号量参考:Linux 内核同步(四):信号量 semaphore). 互斥体简洁高效,但是相比信号 ...
- VC防止程序被多次运行 互斥体方法
BOOL CXXXApp::InitInstance() //函数内添加代码HANDLE hMutex=CreateMutex(NULL,TRUE,"test"); // 用于检测 ...
- .Net CLR 中的同步机制(一): 互斥体
随着软硬件技术的发展,无论是在Web服务或者云计算,还是单一的应用程序,串行方式编写的软件越来越少,我们总是可以看见并行的存在.但是并行并不是适合于每一种场景,也完全不是将工作扔到线程池中排队运行那么 ...
- win32线程学习总结(临界区,互斥体,事件,信号量)
一.临界区 CRITICAL_SECTION 例程 https://blog.csdn.net/Kwansy/article/details/106485496 临界区用于资源互斥访问,性能比互斥体好 ...
- Windows事件等待学习笔记(四)—— 事件信号量互斥体
Windows事件等待学习笔记(四)-- 事件&信号量&互斥体 要点回顾 事件 实验:验证SignalState 第一步:编译并运行以下代码 第二步:观察结果 第三步:修改代码并执行 ...
- 5天不再惧怕多线程——第三天 互斥体
5天不再惧怕多线程--第三天 互斥体 没想到我的前两篇文章还挺受欢迎的,谢谢大家,今天整理下Mutex的使用. 一:Mutex 首先看下MSDN对它的解释: 不错,出现了一个亮点,可用于"进 ...
- 信号量、互斥体和自旋锁
一.信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信.本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况.一般说来,为了获 ...
最新文章
- bootstrap 冻结表格,冻结表头
- git提交输入密码_git提交到自己的服务器,每次都要输入密码
- 关于MySQL的各种总结
- 数学--数论--Find Integer(勾股数定理)
- oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例
- idea 个性化定制快捷键
- OpenCV resize 图像缩放
- 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
- nagios介绍及Server安装(三)
- 1 javascript视频教程 初识javascript
- QuickFlow-如何通过QFD and ExecuteCode获取其他列表数据
- matlab测量直流母线上的电压,基于模糊控制的有源滤波器直流母线电压控制
- java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署
- 深拷⻉和浅拷⻉区别是什么?
- 高等数学:如何理解泰勒展开公式?等价无穷小与泰勒公式的关系是什么?
- 基于时频域统计特征提取的自然环境声音识别方法
- 微软官方的精简版Windows 7——Windows Thin PC
- PADS学习之路09-PADS LOGIC创建原理图工程文件
- 系统dll文件损坏、缺失 如何解决
- 股市理论---牛马熊
热门文章
- 数据库-优化-案例-max()函数优化
- plsql(轻量版)_异常处理机制
- 如何判断对象是否存活之根搜索算法
- 设计模式之_工厂系列_03
- adb命令 android 串口_ADB使用linux命令查看Android的使用情况
- PriorityBlockingQueue源码
- java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
- (超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
- 韩国研制出世界最薄光伏电池:厚度仅为人类头发直径百分之一
- 2014年工作中遇到的20个问题:120-140