Salut les gars J'améliore ma connaissance du multithreading C# et je me demandais comment résoudre ce problème d'interblocage classique.Deadlocks C# Solution
public class SomeClass
{
private object _lock1 = new object();
private object _lock2 = new object();
public void Method1()
{
lock (_lock1)
{
Thread.Sleep(10000);
lock (_lock2)
{
Thread.Sleep(10000);
}
}
}
public void Method2()
{
lock (_lock2)
{
Thread.Sleep(10000);
lock (_lock1)
{
Thread.Sleep(10000);
}
}
}
}
Si deux threads s'exécutent simultanément, il existe un risque d'interblocage.
Merci
Vous le résolvez en n'écrivant jamais de telles choses. Si vous avez une situation qui doit absolument le faire pour une raison idiote et qui ne peut pas être reconfigurée, les threads devraient essayer le verrou externe et s'ils ne peuvent pas le prendre immédiatement, faites d'autres choses et revenez et essayez à nouveau le verrou. –
Peut-être que l'article * No More Hangs: Techniques avancées pour éviter et détecter les blocages dans les applications .NET * sur [MSDN] (http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7- 9e6d-3aa95b5a6aea/MSDNMagazineApril2006en-us.chm) peut vous aider. – Oliver