为什么我们需要Windows中的Mutex和事件?从某种意义上说,窗户只有Mutex吗?使用Mutex无法完成的事件可以做什么?
答案 0 :(得分:9)
事件允许线程阻塞,直到某个事件(因此名称)被广播。阻止事件意味着“当事情发生时叫醒我”;你希望能入睡。事件是一种信号机制,并为互斥体上没有提供支持,例如一旦等待它的人被唤醒就能自动清除信号。此外,API允许阻止,直到其中一个或所有多个事件都被发出信号。
另一方面,互斥(互斥)是共享资源的范围协调机制。想想交易。您不希望等待,但想要访问某些共享资源,并且只有在其他人已经访问它的情况下,您才会阻止它。
如果您尝试使用互斥锁模拟某个事件,那么您将面临一个问题,即一旦您获得了锁定(何时应该表示“事件发出信号”),您将保留所有其他人,直到您释放该锁定。这不是发信号通知事件的语义;它可能会保持发布状态,并且“门”将为每个测试事件的线程打开,而不会获取任何锁。
答案 1 :(得分:1)
Mutex专用于进程间同步。这是内核模式对象。 一个进程内的多线程同步事件。这是用户模式对象。
Mutex对象非常通用而且很重,另一方面事件对象要轻得多。在大多数情况下,您必须使用用户模式同步,因为它可以减少CPU周期。