¿Alguien puede dar un ejemplo de cómo se puede causar el interbloqueo de subprocesos en el lenguaje C#?Ejemplo de interbloqueo de subprocesos en C#
Respuesta
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, llegué a esta pregunta para describir algo como esto. El orden de adquisición de bloqueo es una preocupación muy común en la práctica. Regla de oro: si necesita tener 2 bloqueos al mismo tiempo, debe adquirirlos y liberarlos en un orden predecible y consistente. – asveikau
En el otro extremo de la escala, contextos de sincronización independientes invitan a callejones sin salida. He aquí un ejemplo:
[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();
}
Debido a que cada instancia de interbloqueo se creado dentro de prueba - una clase de falta de sincronización - cada instancia voluntad obtiene su propio contexto de sincronización , y por lo tanto, su propio candado. Cuando los dos objetos llaman el uno del otro, no se necesita mucho tiempo para el estancamiento que ocurra (un segundo, para ser exactos!) El problema sería particularmente insidiosa si el punto muerto y la prueba clases fueron escritos por diferentes equipos de programación . Puede ser irrazonable esperar que los responsables de la clase de prueba sean conscientes de su transgresión, solo saben cómo resolver . Esto está en contraste con los bloqueos explícitos , donde los bloqueos son generalmente más obvios .
- 1. Interbloqueo en un solo programa de subprocesos Java
- 2. muestra de interbloqueo en .net?
- 3. Ejemplo de grupo de subprocesos dinámicos en boost :: asio
- 4. Grupo de subprocesos de C++
- 5. Interbloqueo en el subproceso de Python popen
- 6. paralelismo de ForkJoinPool = 1 interbloqueo
- 7. Subprocesos de fondo en C#
- 8. C + + sobrecarga de subprocesos
- 9. Depuración de subprocesos C#
- 10. interbloqueo en sincronizado (Interno de cadena())
- 11. Interbloqueo en código de ruby con SizedQueue
- 12. Interbloqueo en SELECCIONAR/ACTUALIZAR
- 13. Interbloqueo en concurrent.futures código
- 14. Ejemplo de mejor cola de subprocesos/mejores prácticas
- 15. La aplicación .NET se cuelga con el interbloqueo de subprocesos GC
- 16. C++ pthread bloqueo de interbloqueo de cola (creo)
- 17. Interbloqueo SQLServer
- 18. Subprocesos C# - Publicar mensajes entre subprocesos
- 19. Errores de subprocesos múltiples en C#
- 20. Registro asíncrono seguro de subprocesos en C++
- 21. Interbloqueo interoperabilidad WPF en DisplaySettingsChanging
- 22. Subprocesos asíncronos en C++ estándar
- 23. Interbloqueo en Paralelo.ParaEach con ReaderWriterLockSlim
- 24. Ejemplo de subprocesamiento en Android
- 25. sobreasignación de subprocesos de subprocesos de Java
- 26. Mysql explicación de interbloqueo necesario
- 27. Error de interbloqueo en la instrucción INSERT
- 28. Cómo solucionar problemas de interbloqueo en kernel
- 29. ¿Puede llamar a WSAStartup() desde varios subprocesos para provocar un interbloqueo?
- 30. Ejemplo de uso de MSCHART en C#
¿Es esta tarea? –
Él no lo etiquetó como tarea. – zgnilec