Windows上的互斥和事件

Windows上的互斥和事件,windows,events,mutex,Windows,Events,Mutex,为什么在Windows中需要互斥和事件?从某种意义上说,windows不能只有互斥吗?对于无法使用互斥体完成的事件,可以执行哪些操作?事件允许线程阻塞,直到广播某个事件(因此得名)。阻止事件意味着“发生事情时叫醒我”;你希望被安睡。事件是一种信号机制,它提供了互斥体上没有的支持,例如,当等待信号的人被唤醒时,能够自动清除信号。此外,API允许阻塞,直到几个事件中的一个或全部发出信号 另一方面,互斥(mutex,互斥)是共享资源的一种作用域协调机制。想想交易。您不希望等待,而是希望访问某些共享资源

为什么在Windows中需要互斥和事件?从某种意义上说,windows不能只有互斥吗?对于无法使用互斥体完成的事件,可以执行哪些操作?

事件允许线程阻塞,直到广播某个事件(因此得名)。阻止事件意味着“发生事情时叫醒我”;你希望被安睡。事件是一种信号机制,它提供了互斥体上没有的支持,例如,当等待信号的人被唤醒时,能够自动清除信号。此外,API允许阻塞,直到几个事件中的一个或全部发出信号


另一方面,互斥(mutex,互斥)是共享资源的一种作用域协调机制。想想交易。您不希望等待,而是希望访问某些共享资源,只有在其他人已经在访问它的情况下,您才会阻止它


如果您试图使用互斥来模拟事件,那么您将面临一个问题,即一旦获得锁(应该是“事件信号”),您就要阻止其他人进入,直到您释放该锁为止。这不是发出事件信号的语义;它可能会保持发布状态,“门”将为事件的每个线程测试打开,而不会获取任何锁。

专用于进程间同步的互斥锁。这是内核模式对象。 一个进程内多线程同步的事件。这是用户模式对象


互斥对象非常通用且非常重,另一方面,事件对象要轻得多。在大多数情况下,您必须使用用户模式同步,因为它提供更少的CPU周期。

“是共享资源的范围协调机制。想想事务”。。。你也写了吗?