【发布时间】:2014-06-23 20:28:31
【问题描述】:
The docs不解释。他们只说应该锁定什么,不应该锁定什么。
从here 看来,所有线程都应该使用同一个对象才能使锁起作用。从here 看来,这正是应该避免的,以防止死锁。
请记住,我可能会误解整个锁定问题,因为我只是 asked a question 关于如何“锁定”一个变量并得到我认为的 根本无法实现(锁定代码除外)。
【问题讨论】:
-
不解释什么? “lock 关键字通过获取给定对象的互斥锁,执行语句,然后释放锁,将语句块标记为临界区。” - 似乎很清楚。请注意文档中使用的是 object,而不是 variable。
-
lock for a given object- 那。 -
你能显示你试图锁定的代码吗?线程可能很复杂。除了阅读这些线程中提供的答案之外,很难给您答案。 IMO-不,您不应该 lock(this){...} 然后在其他示例中,该对象应作为字段而不是变量,如该线程的答案中所述。使用示例代码帮助您正确锁定会容易得多
-
是的,锁定解决了竞争条件并引入了死锁的风险。赢一些,输一些。您必须以完全正确的方式使用它们,这就是为什么这不是一个好问题。细节很重要。
-
反对票不必解释。但是给你一个想法:一个好的问题可以独立存在,并且更具体和/或更详细。它可能/应该是对您之前的问题的修改。
标签: c# .net multithreading