事件对象 OR 互斥对象 ?该怎么解决
事件对象 OR 互斥对象 ?
在跨进程的线程同步中, 挑选Event还是Mutex?
感觉这二个都差不多, 效率上差不多, 实现上, Event内部维护一个状态量, 而Mutex维护当前线程的ID, 也差不多.
它们还有什么区别吗?
------解决方案--------------------
MFC 提供的六种多线程类分为两类:同步对象(CSyncObject、CSemaphore、CMutex、CCriticalSection 和 CEvent)和同步访问对象(CMultiLock 和 CSingleLock)。
当必须控制对资源的访问以确保资源的完整性时,使用同步类。同步访问类用于获取对这些资源的访问权。此文章描述各个类的使用时间。
若要确定应使用的同步类,请询问以下一系列问题:
应用程序必须等到发生某事才能访问资源(例如,在将数据写入文件之前,必须先从通信端口接收它)吗?
如果是,则使用 CEvent。
同一应用程序内一个以上的线程可以同时访问此资源(例如,应用程序允许在同一文档上最多同时打开五个带有视图的窗口)吗?
如果是,请使用 CSemaphore。
可以有一个以上的应用程序使用此资源(例如,资源在 DLL 中)吗?
如果是,请使用 CMutex。
如果不是,请使用 CCriticalSection。
从不直接使用 CSyncObject。它是其他四个同步类的基类。
在跨进程的线程同步中, 挑选Event还是Mutex?
感觉这二个都差不多, 效率上差不多, 实现上, Event内部维护一个状态量, 而Mutex维护当前线程的ID, 也差不多.
它们还有什么区别吗?
------解决方案--------------------
MFC 提供的六种多线程类分为两类:同步对象(CSyncObject、CSemaphore、CMutex、CCriticalSection 和 CEvent)和同步访问对象(CMultiLock 和 CSingleLock)。
当必须控制对资源的访问以确保资源的完整性时,使用同步类。同步访问类用于获取对这些资源的访问权。此文章描述各个类的使用时间。
若要确定应使用的同步类,请询问以下一系列问题:
应用程序必须等到发生某事才能访问资源(例如,在将数据写入文件之前,必须先从通信端口接收它)吗?
如果是,则使用 CEvent。
同一应用程序内一个以上的线程可以同时访问此资源(例如,应用程序允许在同一文档上最多同时打开五个带有视图的窗口)吗?
如果是,请使用 CSemaphore。
可以有一个以上的应用程序使用此资源(例如,资源在 DLL 中)吗?
如果是,请使用 CMutex。
如果不是,请使用 CCriticalSection。
从不直接使用 CSyncObject。它是其他四个同步类的基类。