AutoResetEvent和Mutex之间的区别是什么

本文关键字:区别 是什么 之间 Mutex AutoResetEvent | 更新日期: 2023-09-27 18:20:02

我对这些概念很陌生。但随着我在threading中的深入,我变得越来越困惑。

mutexsemaphoreautoresetevent有什么意义。

我从研究中了解到的唯一区别是mutex可以执行跨流程操作。如果是这种情况,为什么它不具有与SetResetWaitOne相同的方法。

我们可以用mutex替换AutoResetEvent吗?反之亦然?

请解开这个谜题。

AutoResetEvent和Mutex之间的区别是什么

不同的概念-Mutex是一个独占令牌;只有一个人可以拥有它;当他们释放它时,其他人可能会为它而战。AutoResetEvent是一个在关闭前只允许一个人通过的门,它由一个按钮操作,该按钮与想要通过的人群分开。当他们通过大门时,立即关闭。

这取决于情况。

通常,可以替换AutoResetEvent和Mutex,AutoResetEvent.WaitOne=Mutex.WaitOne和AutoResetEvent.Set=Mute.ReleaseMutex.

但它们不同。你可能提到Mutex有一个"Release",这意味着你可以在呼叫"WaitOne"时"得到"一些东西。你可能得到的东西与正在调用的线程有关。

您可以在任何线程中调用AutoResetEvent.Set。但您只能从名为Mutex.WaitOne的线程中调用Mutex.ReleaseMutex,并获得true结果。

Mutex正在阻止线程访问Critical部分;在AutoResetEvent中,我看到重点不是阻塞关键部分,而是它应该从任何其他线程接收的信号。一旦发出信号,就允许它继续执行。

AutoResetEvent还提供了一个处理竞争条件的选项,比如说先调用set()事件,然后一些线程对其调用wait(),然后wait(()立即接收set()给出的信号,反之亦然。

此外,如果在等待()之前调用了多个set(),然后等待()到达,则多个set()将继续有效,只有一个set()可以等待等待(),其余的将立即消失。