我在.net/C#中被问及这个问题:交易 - 如何避免死锁?
如果我们有两个线程T1和T2。 T1 获取obj1上的锁定,然后执行 某些处理并获取 obj2上的锁定。 T2获得对obj2的锁定并且 然后进行一些处理并获取 对obj1的锁定。所以,我们可以有一个 死锁。我们在多线程中使用的常见技术 是什么,以避免 这种情况?
我回答说T1和T2应该有一定的沟通机制,我们应该这样编码,使得T2只有在T1发出信号后才开始工作。面试官问我是否知道交易以及如何使用它来解决这种僵局。 我在winforms的UI方面有一定的多线程经验。但是,我从来没有使用过交易。有人可以告诉我更多关于此的信息,或者将我指向url/book,
@Ash我得到了以相同的顺序获取锁定点。但是,那么关于交易的是什么呢? – Sandbox 2009-09-19 10:32:17
@Sandbox,对我来说,他们看起来像是在谈论一个“事务”,一般意义上说是确保一系列不同的操作是作为一个(即原子)执行的。在数据库中,这是通过Begin Transaction关键字在.net中实现的,它通过(通常)使用lock语句来实现。我在答复中添加了Joe Duffy强烈推荐的书。 – Ash 2009-09-19 10:56:58