Qualcuno può dare un esempio di come il thread deadlock può essere causato nel linguaggio C#?Esempio di deadlock del thread in C#
risposta
static object object1 = new object();
static object object2 = new object();
public static void ObliviousFunction()
{
lock (object1)
{
Thread.Sleep(1000); // Wait for the blind to lead
lock (object2)
{
}
}
}
public static void BlindFunction()
{
lock (object2)
{
Thread.Sleep(1000); // Wait for oblivion
lock (object1)
{
}
}
}
static void Main()
{
Thread thread1 = new Thread((ThreadStart)ObliviousFunction);
Thread therad2 = new Thread((ThreadStart)BlindFunction);
thread1.Start();
thread2.Start();
while (true)
{
// Stare at the two threads in deadlock.
}
}
+1, sono arrivato a questa domanda per descrivere qualcosa di simile. L'acquisizione dell'ordine di blocco è una preoccupazione molto comune nella pratica. Regola pratica: se hai bisogno di avere 2 blocchi tenuti nello stesso momento, dovrebbero essere acquisiti e rilasciati in un ordine prevedibile e coerente. – asveikau
All'altra estremità della scala, contesti di sincronizzazione separati invitano deadlock. Ecco un esempio:
[Synchronization]
public class Deadlock : ContextBoundObject {
public DeadLock Other;
public void Demo() { Thread.Sleep (1000); Other.Hello(); }
void Hello() { Console.WriteLine ("hello"); }
}
public class Test {
static void Main() {
Deadlock dead1 = new Deadlock();
Deadlock dead2 = new Deadlock();
dead1.Other = dead2;
dead2.Other = dead1;
new Thread (dead1.Demo).Start();
dead2.Demo();
}
Poiché ogni istanza del non ritorno è creato all'interno di prova - una classe non sincronizzato - ogni istanza volontà ottiene il proprio contesto di sincronizzazione , e, di conseguenza, il proprio lucchetto. Quando i due oggetti chiamano gli uni sugli altri, non ci vuole molto per la situazione di stallo che si verifichi (un secondo, per la precisione!) Il problema sarebbe particolarmente insidiosa se la situazione di stallo e di prova classi sono stati scritti da diversi team di programmazione . Potrebbe essere irragionevole aspettarsi che il responsabile della classe Test sia anche consapevole della loro trasgressione, sia lo che sa come risolvere la questione . Questo è in contrasto con i blocchi espliciti , dove i deadlock sono solitamente più ovvi.
- 1. deadlock thread Delphi
- 2. deadlock di blocco di C++ pthread deadlock (credo)
- 3. Come uccidere thread con deadlock in Java?
- 4. Python incorporamento con thread - evitando deadlock?
- 5. Esempio di thread Java?
- 6. Deadlock in MySQL a causa dell'inserimento di più thread
- 7. Deadlock in un programma java a thread singolo
- 8. C++ compile std: esempio di thread con scons
- 9. Deadlock in ThreadPoolExecutor
- 10. Deadlock in Ruby join()
- 11. Modelli per la gestione di un deadlock SQL in C#?
- 12. Come trovare deadlock e prevenirlo in C#
- 13. HTMLUNIT v. 2.15 Blocco deadlock deadlock
- 14. Deadlock Java in Class Loader
- 15. Deadlock in Parallel.ForEach con ReaderWriterLockSlim
- 16. Applicazione .NET si blocca con deadlock thread GC
- 17. Riutilizzo del thread in loop C++
- 18. Nome del thread in ThreadPool - C#
- 19. Incremento sicuro del thread in C#
- 20. Thread in C++ builder
- 21. Pool di thread C++
- 22. È possibile utilizzare il comportamento di sottrazione del lavoro di ForkJoinPool per evitare un deadlock di inattività del thread?
- 23. Deadlock quando thread worker tenta di richiamare qualcosa sul thread principale
- 24. Deadlock nel sottoprocesso di Python
- 25. funzioni di dimensioni e sicurezza del thread in C++
- 26. Lettura del grafico di deadlock SQL
- 27. È necessaria la spiegazione del deadlock Mysql
- 28. Registrazione asincrona thread-thread in C++
- 29. Esempio di pool di thread dinamici in boost :: asio
- 30. Condizione deadlock variabile
È questo compito? –
Non l'ha taggato come compito. – zgnilec