临界区:临界区是一种最简单的同步对象,它只可以在同一进程内部使用。它的作用是保证只有一个线程可以申请到该对象 互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleObject来等待进程和线程退出。
通过互斥量我们可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,你的老板会要求你根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。
事件,前面讲的信号灯和互斥量可以保证资源被正常的分配和使用,而事件是用来通知其他进程/线程某件操作已经完成。 更详细的资料进一步联系.
解决方案 »
- 游戏中的时间获取问题
- 程序中启动另一个EXE,在后台运行,如何实现?
- 菜鸟级语音问题急:HTk语音识别系统是在linux平台上运行的吗?谢谢指点
- 请问vs2005中文版的msdn是中文的还是英文的?
- 有关多串口操作的难题(利用cserialport来做的)。
- 谁知道中科大洋的情况?
- 如果得到指定IP的机器名
- 当一个对话框初始化完成后,自动启动CProgressCtrl?
- 怎样列举局域网内所有的计算机
- to vcmfc:我想要你的Flat库,可以给我一份吗,谢谢:Email:[email protected]
- Pocket PC 2002 和 WinCE 3.0 是什么关系?
- 如何将CString转化为char*类型?
如果一个应用同时可以有多个线程存取相应资源,用CSemaphore;
如果有多个应用(多个进程)同时存取相应资源,用CMutex,否则用CCriticalSection。摘自《Visual C++网络高级编程》
我比较喜欢用CEVENT,可以自己控制他。