Mutex,Event,Semaphore,Critical Section之比较

czbever 2008-11-02 10:30:21
Mutex,Event,Semaphore,Critical Section这四个有什么区别呢?
...全文
798 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcrab 2008-11-03
  • 打赏
  • 举报
回复
不好意思,你弄错了,应该是
手动Event得到信号时,所有等待该事件的线程都将进入可调度状态,自动Event得到信号时,只有一个等待该事件的线程进入可调度状态。
WinEggDrop 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 czbever 的帖子:]
Mutex,Event,Semaphore,Critical Section这四个有什么区别呢?
[/Quote]

http://msdn.microsoft.com/en-us/library/ms686364(VS.85).aspx

看上面的msdn连接,够清楚的了.
czbever 2008-11-02
  • 打赏
  • 举报
回复
各位大侠帮帮忙啊
czbever 2008-11-02
  • 打赏
  • 举报
回复
能不能帮我总结一下呢?这是一道面试题
dch4890164 2008-11-02
  • 打赏
  • 举报
回复
windows核心编程 这本书自己看一下
各有所长的
zpheng 2008-11-02
  • 打赏
  • 举报
回复
事件(Event)是WIN32提供的最灵活的线程间的同步方式,事件可处于激发状态或未激发状态。根据状态变迁方式的不同,事件分为手动设置和自动恢复两类。
互斥量(Mutex)跟临界区很相似,只有拥有胡扯对象的线程才具有访问资源的权限。互斥量又比临界区复杂,运行速度也比较慢,因为使用互斥量不仅能够在同一个应用程序不同线程中实现资源的安全共享,还可以在不同应用程序的线程间实现对资源的安全共享。
信号量(Senmaphores)对象对线程的同步方式与前面几种方法不同,信号量允许多个线程同时使用共享资源。信号量的值我们可以认为是可以同时访问贡献资源的线程最大数目,或者可以理解为可以共享使用的某一类资源的数目。
临界区(CriticalSection)在任意时刻只允许一个线程对共享资源进行访问。临界区不是OS核心对象,如果进入理解去的线程“挂”了,将无法释放临界资源,这个缺点在互斥量中得到了弥补,因为使用互斥量可以设置超时值。
kingcrab 2008-11-02
  • 打赏
  • 举报
回复
Mutex,Event,Semaphore,Critical Section

Event分自动和手动两种,自动Event得到信号时,所有等待该事件的线程都将进入可调度状态,手动Event得到信号时,只有一个等待该事件的线程进入可调度状态。

Mutex每次只有一个线程得到信号,Mutex的内部维护一个线程id,用于标识系统中的哪个线程当前拥有该Mutex对象,与其他的内和对象不同即使Mutex处于没有信号的状态,只要该线程的ID与Mutex维护的ID相同,该线程就可以保持可调度状态。

Semaphore不同于其他内核对象的的地方是他有一个可用资源计数的功能。

Critical Section不同于前面所提到的三种,他们都是内核对象,是在内核方式下实现同步的,而Critical Section则是在用户方式下实现的同步的,效率比前面的三种都要高;另外Critical Section是不能跨进程使用的。
czbever 2008-11-02
  • 打赏
  • 举报
回复
Event Notifies one or more waiting threads that an event has occurred. For more information, see Event Objects.

Mutex Can be owned by only one thread at a time, enabling threads to coordinate mutually exclusive access to a shared resource. For more information, see Mutex Objects.

Semaphore Maintains a count between zero and some maximum value, limiting the number of threads that are simultaneously accessing a shared resource. For more information, see Semaphore Objects.

虽然msdn上面这样写 但是具体区别还不够详细的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧