.net 自旋计数= 0的手动复位事件Slim是否与手动复位事件相同?

ewm0tg9j  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(111)

据我所知,同步原语的精简版本在使用内核资源之前使用旋转等待。
spinCount = 0时的ManualResetEventSlim与通常的ManualResetEvent相同,这是真的吗?

new ManualResetEventSlim(initialState: false, spinCount: 0);

如果没有,它们之间的本质区别是什么?我们使用没有旋转等待的瘦版本有什么好处吗?

uemypmqf

uemypmqf1#

查看Wait的源代码,如果您将旋转计数设置为0,那么它基本上是一个ManualResetEvent,但它实际上使用了一个监视器,而不是使用内核等待事件。
内核等待事件只有在您显式请求它时才被分配,这保存了到内核模式的转换以分配它并设置/重置它。
值得考虑的是,尽管如果将旋转计数设置为0,ManualResetEventSlim不会旋转,但对Monitor.Wait的调用很可能会旋转,因此我怀疑您实际上并没有避免旋转。

相关问题