gpt4 book ai didi

.net - "Critical Section"、 "Critical Region"和 "Constrained Execution Region"之间的区别

转载 作者:行者123 更新时间:2023-12-03 07:02:57 28 4
gpt4 key购买 nike

这实际上是三个不同的概念还是我混淆了? (我一直在阅读有关线程和垃圾收集的文章,但我自己也很困惑。)

“关键部分” - 我认为这可能只是您不希望多个线程同时访问的代码部分的术语,即在 lock 和 Monitor.Enter/Exit 语句内?

“关键区域” - 这里没有真正的线索 - MSDN 说了类似“这告诉主机该部分中抛出的异常可能会产生更广泛的影响”的内容。并且“CLR 的主机(例如 Sql Server)”可以选择“以不同的方式”处理关键区域内引发的异常。不同如何?为什么?而且,最重要的是,在哪些现实场景中我可能需要将代码标记为关键区域?

“约束执行区域” - 我在垃圾收集文章中阅读有关 CriticalFinalizerObject 的内容时遇到了这一点。

我从 MSDN 中所能了解到的就是,这些区域之一内的代码以某种方式保证运行(但如何保证?),因此不得抛出“带外”异常。

什么是带外异常? (我确实用谷歌搜索了这个,但它只是问我是否意味着“越界异常”)。

是否有未处理的异常?或者只是某些类型的异常(exception)?再说一遍,最重要的是,在现实世界的哪些场景中我可能需要“受限执行区域”?

由于我不太理解这些概念,所以我不确定这个问题除了“.NET”之外还需要什么标签。

最佳答案

只是我对这些概念的理解:

关键部分 - 正如你所说。

关键区域 - 这似乎是“不要让异常从线程中逃逸”的大图版本。

约束执行区域 - 这是一种通过防止异常中断来使一段代码或多或少具有原子性的方法。 example on this page使用它来确保句柄的分配和存储都被执行。请注意,没有回滚,它更像是一个预防系统。

“正常编程”的指导方针看起来有点像这样,即当覆盖 Equals 或隐式运算符时,您不应该抛出(任何东西)。

关于.net - "Critical Section"、 "Critical Region"和 "Constrained Execution Region"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/747551/

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