【发布时间】:2012-07-28 16:38:01
【问题描述】:
当两个线程尝试在完全相同的微秒内(或任何可以测量 CPU 片或指令的最短时间长度)锁定同一个对象时会发生什么?
两个线程是否有可能在完全相同的并发时间执行指令,或者这对于当今的硬件来说是不可能的?
我正在从事一个处理多线程的项目,可以这么说,任何线程都可能击败另一个线程到达终点线。所以很自然地,“当它们都同时锁定时会发生什么?”的问题。必须解决 IMO。
【问题讨论】:
-
'当它们同时锁定时会发生什么?'根据定义,这是不可能的。如果这样的事情可能发生,那不是锁。
-
也许可以用另一种方式来提出这个问题:当多个线程达到该点时,锁的行为如何?好吧,我猜内部工作将对对该资源的访问进行排队,唯一的失败情况是当您涉及对不同资源的多个顺序访问并且您遇到所谓的死锁时。无论如何,锁定点是在资源被释放给其他人之前让完整的代码块完成。否则你不会被授予,你的逻辑可能会失败
-
Diego De Vita 正确解释了我的问题。应该重申“当两个线程试图锁定同一个资源时会发生什么?”
-
@MartinBliss - 只有一个会成功。另一个要么立即收到失败返回,要么被拒绝执行,直到成功获得锁的线程释放锁,(或者,有时,直到超时间隔过去而没有获得锁,导致“超时” -失败'返回)。
标签: .net multithreading locking