互斥体CMutex的使用

分类: 2.4 线程/图形学 2010-07-29 14:31 4512人阅读 评论(2) 收藏 举报
attributesmfcsecuritynullthreadwindows

互斥体是CMutex类的对象,也只允许一个线程占有某个共享资源,以保护独占式共享资源。因此,互斥体的使用方法与临界段的使用方法极为相似,所不同的是临界段只能在同一个进程中对线程进行同步,而互斥体可以用在不同的进程中进行线程同步控制。

CMutex类的构造函数原型为:

CMutex( 
    BOOL bInitiallyOwn /* = FALSE */,    //用来指定互斥体对象初始状态是锁定(TRUE)还是非锁定(FALSE) 
    LPCTSTR lpszName /* = NULL */,        //用来指定互斥体的名称 
    LPSECURITY_ATTRIBUTES lpsaAttribute /* = NULL */        //为一个指向SECURITY_ATTRIBUTES结构的指针 

该对象的使用方法与临界段对象的使用方法相似,在线程中获得互斥体对象可以调用成员函数Lock(),需要交出互斥体对象时,调用成员函数UnLock()。

示例:编写一个应用程序,实现进程间线程的同步。
1.创建单文档应用程序;
2.在视图类的实现文件定义一个互斥体对象:

CMutex mutexObj(FALSE,_T("mutex1")); 

3.在视图类的实现文件中定义线程函数:

UINT MessageThread1(LPVOID pParam) 

    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.在视图类的鼠标左键消息函数里面添加如下:

void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 

    AfxBeginThread(MessageThread1, _T("Thread is started")); 
    CView::OnLButtonDown(nFlags, point); 

启动程序的两个实例(运行两个此程序),单击第一个实例的窗口,即启动线程并在线程中锁定互斥体,因此在用鼠标单击第二个实例的窗口时,会没有任何反应,因为第二个实例的线程没有得到互斥体。

程序运行结果如图:

参考资料:

互斥体CMutex的使用相关推荐

  1. boost 线程、互斥体、条件变量

    1.任何技术都是针对特定场景设计的,也就是说,为了解决某个问题而设计的. 2.考虑下面一种场景:一个小旅馆,只有一个卫生间,有清洁人员,店主人,和旅客.卫生间用完之后,就会自动锁闭,必须取钥匙,才能进 ...

  2. CreateMutex创建互斥体可以用于只运行进程的一个实例

    CreateMutex 作用 找出当前系统是否已经存在指定进程的实例.如果没有则创建一个互斥体.CreateMutex()函数可用来创建一个有名或无名的互斥量对象,其函数原型为 VC声明 HANDLE ...

  3. linux 内核互斥体,Linux 内核同步(六):互斥体(mutex)

    互斥体 互斥体是一种睡眠锁,他是一种简单的睡眠锁,其行为和 count 为 1 的信号量类似.(关于信号量参考:Linux 内核同步(四):信号量 semaphore). 互斥体简洁高效,但是相比信号 ...

  4. VC防止程序被多次运行 互斥体方法

    BOOL CXXXApp::InitInstance() //函数内添加代码HANDLE hMutex=CreateMutex(NULL,TRUE,"test"); // 用于检测 ...

  5. .Net CLR 中的同步机制(一): 互斥体

    随着软硬件技术的发展,无论是在Web服务或者云计算,还是单一的应用程序,串行方式编写的软件越来越少,我们总是可以看见并行的存在.但是并行并不是适合于每一种场景,也完全不是将工作扔到线程池中排队运行那么 ...

  6. win32线程学习总结(临界区,互斥体,事件,信号量)

    一.临界区 CRITICAL_SECTION 例程 https://blog.csdn.net/Kwansy/article/details/106485496 临界区用于资源互斥访问,性能比互斥体好 ...

  7. Windows事件等待学习笔记(四)—— 事件信号量互斥体

    Windows事件等待学习笔记(四)-- 事件&信号量&互斥体 要点回顾 事件 实验:验证SignalState 第一步:编译并运行以下代码 第二步:观察结果 第三步:修改代码并执行 ...

  8. 5天不再惧怕多线程——第三天 互斥体

    5天不再惧怕多线程--第三天 互斥体 没想到我的前两篇文章还挺受欢迎的,谢谢大家,今天整理下Mutex的使用. 一:Mutex 首先看下MSDN对它的解释: 不错,出现了一个亮点,可用于"进 ...

  9. 信号量、互斥体和自旋锁

    一.信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信.本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况.一般说来,为了获 ...

最新文章

  1. bootstrap 冻结表格,冻结表头
  2. git提交输入密码_git提交到自己的服务器,每次都要输入密码
  3. 关于MySQL的各种总结
  4. 数学--数论--Find Integer(勾股数定理)
  5. oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例
  6. idea 个性化定制快捷键
  7. OpenCV resize 图像缩放
  8. 如何在macOS Big Sur的Voice Memos中使用增强录音和智能文件夹?
  9. nagios介绍及Server安装(三)
  10. 1 javascript视频教程 初识javascript
  11. QuickFlow-如何通过QFD and ExecuteCode获取其他列表数据
  12. matlab测量直流母线上的电压,基于模糊控制的有源滤波器直流母线电压控制
  13. java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署
  14. 深拷⻉和浅拷⻉区别是什么?
  15. 高等数学:如何理解泰勒展开公式?等价无穷小与泰勒公式的关系是什么?
  16. 基于时频域统计特征提取的自然环境声音识别方法
  17. 微软官方的精简版Windows 7——Windows Thin PC
  18. PADS学习之路09-PADS LOGIC创建原理图工程文件
  19. 系统dll文件损坏、缺失 如何解决
  20. 股市理论---牛马熊

热门文章

  1. 数据库-优化-案例-max()函数优化
  2. plsql(轻量版)_异常处理机制
  3. 如何判断对象是否存活之根搜索算法
  4. 设计模式之_工厂系列_03
  5. adb命令 android 串口_ADB使用linux命令查看Android的使用情况
  6. PriorityBlockingQueue源码
  7. java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
  8. (超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
  9. 韩国研制出世界最薄光伏电池:厚度仅为人类头发直径百分之一
  10. 2014年工作中遇到的20个问题:120-140