程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.NET中的锁(监控)内部实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决.NET中的锁(监控)内部实现?

开发过程中遇到.NET中的锁(监控)内部实现的问题如何解决?下面主要结合日常开发的经验,给出你关于.NET中的锁(监控)内部实现的解决方法建议,希望对你解决.NET中的锁(监控)内部实现有所启发或帮助;

经过一些调查,我找到了问题的答案。总的来说,CodeInChaos和Henk HolteRMAN是正确的,但是这里有一些细节。

首先,当线程开始与其他线程争用锁时,它会在尝试获取锁的同时进行自旋等待循环。所有这些操作都是在 用户模式下 执行的。然后,如果没有成功的OS内核对象Event创建,线程将切换到 内核模式 并等待来自this的信号Event

因此,对我的问题的回答是: 1.更好的情况下不,但更糟糕的是(Event如果需要,对象会延迟创建); 2.通常,它在用户模式下工作,但是如果线程争夺锁的时间太长,则可以将线程切换到内核模式(通过Win API非托管函数调用); 3.从用户模式切换到内核模式的开销(约1000个cpu周期); 4. Microsoft声称它是类似于FIFO的“诚实”算法,但不能保证这一点。(例如,如果“等待队列”中的线程将被挂起,则将在恢复时移至队列末尾。)

解决方法

为了掌握某些技术,您必须知道它是如何在较低的抽象级别上制造的。对于多线程编程,最好了解同步原语。
问题是,如何在.NET中实现Lock(Monitor)?

很感兴趣
-它利用OS对象吗?
-是否需要用户模式或内核模式?
-等待锁的线程的开销是多少?
-在什么情况下线程排队等待锁可能会被违反?

更新:
“如果有多个线程争用该锁,则它们将在“就绪队列”中排队,并以先到先得的方式授予该锁。
注意:Windows和CLR行为的细微差别意味着,有时会违反队列的公平性。 “ [C#4.0简而言之,约瑟夫·阿尔巴哈里(Joseph
Albahari)]因此,这就是我在关于“违规队列”的最后一个问题中提出的问题。

大佬总结

以上是大佬教程为你收集整理的.NET中的锁(监控)内部实现全部内容,希望文章能够帮你解决.NET中的锁(监控)内部实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。