gpt4 book ai didi

.net - AutoResetEvent、ManualResetEvent 与监视器

转载 作者:行者123 更新时间:2023-12-04 11:10:16 26 4
gpt4 key购买 nike

假设我必须在 .Net 3.5 SP1 中编排同步算法,标题中列出的任何同步原语都非常适合该任务。

从性能的角度来看,是否有任何一个比其他的性能更好?

我问这个是因为我已经编码了一段时间,但对这个主题没有适当的了解。

最佳答案

WaitHandles 看起来与Wait/Pulse Constructs 非常相似,但区别在于细节:WaitHandles Set 方法即使没有线程在等待也设置信号。这意味着如果您在一个线程中调用 Set ,然后在同一等待句柄上的另一个线程中调用 WaitOne ,则第二个线程将继续。 Wait 和 Pulse 不同,Pulse 只向已经在等待队列中的线程发出信号。这意味着如果您在一个线程中调用 Pulse,然后在同一对象的另一个线程中调用 Wait,则第二个线程将永远等待(死锁)。如果使用等待和脉冲,您必须非常小心,仅当您知道自己在做什么时才使用它,否则您可能会很幸运 ...

要使用 Monitor、天气 AutoReset 或 ManualReset 自己创建 WaitHandle 的行为,您需要做的不仅仅是简单的 Wait/Pulse 构造。 只需使用完成工作所需的工具 :

如果您无法使用简单的锁定或原子操作同步线程,请考虑使用 WaitHandles。如果您无法使用 WaitHandles 同步线程,请考虑使用 Wait 和 Pulse。

关于.net - AutoResetEvent、ManualResetEvent 与监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com