CSemaphore/CMutex/CCriticalSection/CEvent区别

临界区:临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象。 
         互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
         互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleObject来等待进程和线程退出。
通过互斥量我们可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,你的老板会要求你根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
         事件,前面讲的信号灯和互斥量可以保证资源被正常的分配和使用,而事件是用来通知其他进程/线程某件操作已经完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软开发的一种应用程序框架,它可以简化Windows应用程序的开发。多线程指的是在一个程序中同时运行多个线程,每个线程可以独立执行不同的任务。使用MFC进行多线程编程可以提高程序的性能和响应速度。 在MFC中,我们可以使用CWinThread类来创建和管理线程。首先,我们需要继承CWinThread类并重写其Run函数,在Run函数中编写线程的执行逻辑。然后,通过调用CWinThread的CreateThread函数创建并启动线程。 在多线程编程中,需要特别注意线程之间的同步和互斥。MFC提供了一些同步对象,例如CSemaphoreCCriticalSection等,用于实现线程之间的同步操作。我们可以使用这些同步对象来避免多个线程同时访问共享资源,从而避免发生竞态条件和数据不一致问题。 当然,在多线程编程中,还需要注意避免产生死锁和线程间的资源竞争问题。为了避免死锁,我们可以遵循一些原则,例如按照相同的顺序获取锁、避免嵌套锁等。对于资源竞争问题,我们可以使用互斥锁等同步机制来保证共享资源的正确访问。 总而言之,MFC多线程编程是利用MFC框架进行多线程应用程序的开发。通过继承和重写CWinThread类,我们可以创建和管理多个线程,并使用MFC提供的同步对象来实现线程之间的同步。同时,需要注意避免死锁和资源竞争问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值