我是这些概念的新手。但随着我在threading
的深入,我感到困惑。
mutex
,semaphore
对autoresetevent
的重要性是什么。
我在研究中发现的唯一区别是mutex
可以跨过程操作执行。如果是这种情况,为什么它与Set
,Reset
,WaitOne
的方法不同。
我们可以将AutoResetEvent
替换为mutex
,反之亦然?
请解决这个难题。
答案 0 :(得分:19)
不同的概念 - Mutex
是一个独占令牌;只有一个人可以拥有它;当他们释放它时,其他人可以战胜它。 AutoResetEvent
是一个门,在关闭之前只允许一个人通过,并且由一个与想要通过的队列分开的按钮操作。当他们立即通过门时关闭。
答案 1 :(得分:0)
要视情况而定。
通常,可以替换AutoResetEvent和Mutex,即AutoResetEvent.WaitOne = Mutex.WaitOne和AutoResetEvent.Set = Mutex.ReleaseMutex。
但是它们是不同的。您可能会提到Mutex有一个“发布”,这意味着您可以在调用“ WaitOne”时“获取”某些东西。您可能得到的东西与正在调用的线程有关。
您可以在任何线程中调用AutoResetEvent.Set。但是您只能从名为Mutex.WaitOne的线程中调用Mutex.ReleaseMutex,并获得真实的结果。