1.锁定范围保护共享代码区域 - 假设有一个线程执行一个方法,在循环中递增一个简单的整数变量x - 然而,这不会保护可能在另一个线程上的另一个方法中也会改变变量x的代码...
由于这是两个不同的代码区域,可能影响相同的变量,我们是否通过使用相同的锁变量锁定两个代码区域来解决这个问题? 如果您使用不同的锁变量锁定了两个代码区域,那么这将无法保护该变量,对吗?
2.进一步说明这个例子,如果由于某种原因,一个方法中的代码进入了一些无限循环并永远不释放锁变量 - 另一个方法中的第二个代码区域如何检测到这一点呢?
3.选择锁变量如何影响锁的行为?我已经阅读了许多关于这个主题的帖子,但似乎从来找不到一个明确的答案 - 在某些情况下,人们明确使用一个对象变量专门用于此目的,其他时候人们使用lock(这) ,最后有时我看到人们使用类型对象。
不同的锁变量选择如何影响锁的行为/范围,什么情况下使用其中之一是有意义的?
4.假设您有一个包装在类中的哈希表,公开添加,删除,获取和某种计算方法(例如每个对象表示一个数量,该方法对每个值求和),并且所有这些方法都被锁定 - 但是,一旦将对该集合中对象的引用提供给其他代码并传递应用程序,该对象(而不是哈希表)现在将超出该类方法周围的锁定范围... 那么,如何保护对从哈希表中取出的这些实际对象的访问/更新,这可能会干扰Calculate方法?
感谢提供任何启发,这将有助于加强我的理解 - 谢谢!