【发布时间】:2012-08-12 19:38:12
【问题描述】:
关于 .NET 中的多线程的一些新手问题,我认为这将有助于强化我正在尝试吸收的一些概念 - 我已经阅读了一些多线程材料(包括 Albahari 电子书),但我觉得我只需要一些确认一些有助于推动这些概念的问题
-
锁定范围保护代码的共享区域 - 假设有一个线程执行一个方法,该方法在循环中增加一个简单的整数变量 x - 但是这不会保护其他地方的代码也可能改变变量 x 例如在另一个方法中在另一个线程上......
由于这是两个不同的代码区域,可能会影响同一个变量,我们是否可以通过在变量 x 周围的两个锁定范围内使用相同的锁定变量锁定两个代码区域来解决这个问题?如果你用不同的锁变量锁定了两个代码区域,这不会保护变量正确吗?
1234563其他方法检测到这个?
-
锁变量的选择如何影响锁的行为?我已经阅读了很多关于这个主题的帖子,但似乎永远找不到明确的答案——在某些情况下,人们明确地为此目的使用对象变量,其他时候人们使用 lock(this),最后我'见过人们使用类型对象。
锁变量的不同选择如何影响锁的行为/范围?在哪些场景下使用其中一个更有意义?
- 假设您有一个包含在一个类中的哈希表,该类公开 add、remove、get 和某种计算方法(例如,每个对象代表一个数量,并且此方法对每个值求和)并且所有这些方法都被锁定 - 但是,一旦引用到该集合中的对象可用于其他代码并传递给应用程序,该对象(不是哈希表)现在将位于该类方法周围的锁定范围之外..然后您如何保护对这些方法的访问/更新从哈希表中获取的实际对象,这可能会干扰计算方法?
感谢提供的任何有助于强化这些概念的启发式方法 - 谢谢!
【问题讨论】:
-
每个问题一个问题,请。
-
@JohnSaunders - 通常是的,但这是一系列(强烈)相关的问题。
-
请不要关闭它。这个问题很有用,并且有有用的答案。子问题属于一起。
-
@usr:Stack Overflow 不是这样工作的。如果他愿意,OP 应该提出单独的问题,并包括所有问题的链接,但它们需要是单独的问题。这不是一个讨论论坛。
标签: c# multithreading