这到底是三个不同的概念,还是我搞混了?(我一直在一起阅读有关线程和垃圾收集的文章,我对自己感到困惑。)
“关键部分”--我认为这可能只是指您不希望多个线程同时访问的部分代码,即内部锁和监视器。进入/退出语句?
“关键区域”--这里没有真正的线索-- MSDN说了一些类似于“这告诉主机在部分中抛出的异常可能会产生更广泛的影响”的东西。而且,“CLR主机(例如Server)”可以选择“不同”地处理关键区域内引发的异常。怎么不一样?为什么?而且,最重要的是,在什么样的实际场景中,我可能需要将代码标记为一个关键区域?
“受限执行区域”--我在一篇垃圾收集文章中阅读关于CriticalFinalizerObject的文章时发现了这一点。
我从MSDN中所能了解到的是,这些区域中的一个区域内的代码以某种方式保证运行(但是如何运行呢?)因此,不能抛出“越界”的异常。
什么是out-of-band exception?(我在谷歌上做了这件事,但它只是问我,我的意思是不是“不允许例外”)。
是否有任何未处理的异常?还是只有某些类型的例外?同样,最重要的是,在什么样的现实场景中,我可能需要一个“受限的执行区域”?
因为我完全不理解这些概念,所以我不确定这个问题除了".NET“需要什么标记。
发布于 2009-04-14 13:58:27
我对这些概念的理解就是:
关键部分-正如您所说的。
Critical --这似乎是“不要让异常从线程中逸出”的全局性版本。
约束执行区域--这是一种通过防止异常中断来或多或少地使代码具有原子性的一种方法。此页面上的示例使用它来确保句柄的分配和存储都被执行。请注意,没有回退,这是一个更多的预防系统。
对于“正常编程”,有一些指南看起来有点像这样,即当重写等于或隐式运算符时,您不应该抛出(任何东西)。
发布于 2009-04-14 13:49:54
根据Joe在Windows上的并发编程,关键部分/区域的定义如下:
关键部分:在Win32中,关键部分是用于构建关键区域的简单数据结构(CRITICAL_SECTION)。
关键区域:是一个共享互斥的代码区域(这似乎就是上面提到的关键部分)。
发布于 2010-11-10 02:17:55
这篇博客文章将填补你的困惑。链接
https://stackoverflow.com/questions/747551
复制相似问题