MFC 线程同步(转)

一直在使用MFC的线程同步类,但却没有深入研究过,正因为此几个月前写的一个较大的代码还发生了互锁,导致查了好半天。今天静下心来大致复习一遍。
  MFC中有7种多线程类,分两类:同步对象(CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent);以及同步访问对象(CMultiLock and CSingleLock)
  其中我最常用的是CCriticalSection,从本科毕设的MPEG4流数据链表缓存,到前几天写的USB摄像头回放并图像数据处理,对于其它同步类却不甚清楚
  查相关资料简单总结如下:
  同步对象:
  CCriticalSection临界区是保证在某一个时间只有一个线程可以访问数据的方法;
  CMutex互斥与CCriticalSection很相似,但是使用时相对复杂一些,它不仅可以在同一应用程序的线程间实现同步,还可以在不同的进程间实现同步(如dll);
  Csemaphore信号量可以同一时刻允许多个线程访问同一个资源。
  事件对象:
  CEvent事件对象处于两种状态之一:有信号和无信号,线程可以监视处于有信号状态的事件,以便在适当的时候执行对事件的操作。使用SetEvent()来发出信号,使用WaitForSingleObject()来等待信号到来
  自定义消息通信:
  PostMessage()或PostThradMessage()来发送消息
原文地址:https://www.cnblogs.com/zhihaowang/p/10128635.html