CSemaphore/CMutex/CCriticalSection/CEvent区别
2012-04-23 17:10
190 查看
临界区:临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象。
互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleObject来等待进程和线程退出。
通过互斥量我们可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,你的老板会要求你根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
事件,前面讲的信号灯和互斥量可以保证资源被正常的分配和使用,而事件是用来通知其他进程/线程某件操作已经完成。
互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleObject来等待进程和线程退出。
通过互斥量我们可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,你的老板会要求你根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
事件,前面讲的信号灯和互斥量可以保证资源被正常的分配和使用,而事件是用来通知其他进程/线程某件操作已经完成。
相关文章推荐
- CSemaphore/CMutex/CCriticalSection/CEvent区别
- 【转】CSemaphore/CMutex/CCriticalSection/CEvent之间有什么区别
- CSemaphore/CMutex/CCriticalSection/CEvent之间区别
- CSemaphore/CMutex/CCriticalSection/CEvent区别
- CMutex、CCriticalSection、CSemaphore、CEvent、WaitForSingleObject 的小例子
- 关于CRITICAL_SECTION与 CMutex 的看法
- windows多线程编程--线程与同步对象CSemaphore,CMutex,CCriticalSection,CEvent简述(2007-07-15 11:07)
- Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
- c++多线程编程中Mutex和Critical_Section的区别
- InitializeCriticalSectionAndSpinCount以及InitializeCriticalSection的区别
- section和div的区别
- 临界区读取操作类 CRWCriticalSection
- @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别
- InitializeCriticalSectionAndSpinCount
- windows critical section (关键段)
- WaitForSingleObject 和 EnterCriticalSection 效率比较
- 对使用CRITICAL_SECTION实现读写锁的质疑
- Windows API一日一练(46)EnterCriticalSection和LeaveCriticalSection函数
- 线程同步 CCriticalSection(临界区类)
- HTML5的article和section的区别