J M*_*J M 14 .net critical-section critical-region constrained-execution-reg
这些实际上是三个不同的概念还是我变得混乱?(我一直在阅读有关线程和垃圾收集的文章,并让自己感到困惑.)
"关键部分" - 我认为这可能只是您不希望多个线程同时访问的代码段的术语,即内部锁和Monitor.Enter/Exit语句?
"关键区域" - 这里没有真正的线索 - MSDN说的是"这告诉主持人该部分内的异常可能会产生更广泛的影响".并且"CLR的主机,例如Sql Server"可以选择"以不同方式"处理在关键区域内抛出的异常.不同如何?为什么?而且,最重要的是,我需要将代码标记为关键区域的真实场景?
"约束执行区" - 我在阅读垃圾收集文章中的CriticalFinalizerObject时遇到过这种情况.
我在MSDN上可以理解的是,其中一个区域内的代码在某种程度上可以保证运行(但是如何?)因此必须抛出"带外"异常.
什么是out-of-band exception?(我确实谷歌了,但它只是问我是否意味着"超出界限").
是否有任何未处理的例外?或者只是某些类型的例外?而且,最重要的是,在现实世界的情景中,我可能需要一个"受限制的执行区域"?
由于我根本不理解这些概念,我不确定这个问题除了".NET"之外还需要什么标签.
微软可能会以不同的方式定义事物,但总的来说,关键区域和关键部分是相同的.
它们被用来描述两个或更多个进程(或线程)的区域访问的相同的共享存储器,且故障到协调它们将导致竞争条件,以防止在执行所期望的行为,如经典的例子Pétur给出递增并递减上面的变量.
在Tanenbaum,AS和Bos,H.(2015)中可以找到一个很好的讨论.现代操作系统(Pearson,Boston,Ma),第4版,第1101页.早期版本以及为其操作系统课程提供材料的众多大学的课程网站.
只是我对这些概念的理解:
关键部分 - 如你所说.
关键区域 - 这似乎是"不要让异常从线程中逃脱"的大图片版本.
约束执行区域 - 这是一种通过防止异常中断来使一段代码或多或少成为原子的方法.此页面上的示例使用它来确保执行句柄的分配和存储.请注意,没有回滚,它更像是一个预防系统.
有"正常编程"的指导看起来有点像这样,即当重写Equals或隐式运算符时,你不应抛出(任何东西).
| 归档时间: |
|
| 查看次数: |
6848 次 |
| 最近记录: |