Pregunta

Cuando la escritura de aplicaciones multiproceso, uno de los problemas más comunes experimentados son los interbloqueos.

Mis preguntas a la comunidad son:

  1. ¿Qué es un interbloqueo?

  2. ¿Cómo detectarlos?

  3. Hacer que los manejan?

  4. Y finalmente, ¿cómo evitar que se produzcan?

¿Fue útil?

Solución

Un bloqueo se produce cuando varios procesos intentan acceder al mismo recurso al mismo tiempo.

Un proceso se pierde y debe esperar a que el otro termine.

Un interbloqueo se produce cuando el proceso de espera se sigue agarrando a otro recurso que el primer necesidades antes de que pueda terminar.

Así, un ejemplo:

Recurso de recursos y B son utilizados por el proceso de X y de proceso Y

  • X comienza a utilizar A.
  • X e y tratar de empezar a utilizar B
  • Y 'gana' y obtiene B de primera
  • ahora Y necesita usar Un
  • Una es bloqueado por X, que está esperando Y

La mejor manera de evitar los interbloqueos es para evitar que los procesos de la cruz más en este camino.Reducir la necesidad de bloquear nada tanto como usted puede.

En las bases de datos de evitar hacer un montón de cambios a diferentes tablas en una sola transacción, evitar los factores desencadenantes y el interruptor para optimista/sucio/nolock lee tanto como sea posible.

Otros consejos

Permítanme explicar un mundo real (no reales) ejemplo de una situación de interbloqueo de la delincuencia en las películas.Imagina un criminal tiene un rehén y en contra de que un policía también tiene un rehén, que es un amigo de la penal.En este caso, el penal no va a dejar que el rehén vaya si la cop no deje a su amigo a dejar ir.También la cop no va a dejar que el amigo de penal a dejar ir, a menos que el penal libera a los rehenes.Este es un infinito que no son de fiar situación, debido a que ambos lados están insistiendo en el primer paso de uno a otro.

Penales Y De La Cop De La Escena

enter image description here

Así que, simplemente, cuando dos hilos necesita de dos recursos diferentes y cada uno de ellos tiene el bloqueo de los recursos que el otro necesita, es un interbloqueo.

Otro Alto Nivel de Explicación de Interbloqueo :Corazones Rotos

Estás saliendo con una chica y un día después de una discusión, ambos lados están corazón-roto el uno al otro y a la espera de una Yo-soy-lo siento-y-yo-perdidos-usted de la llamada.En esta situación, ambas partes desean comunicarse entre sí, si y sólo si uno de ellos recibe un Yo-soy-lo siento la llamada de la otra.Debido a que ninguno de los dos va a iniciar la comunicación y la espera en un estado pasivo, ambos se espere a que la otra para iniciar la comunicación, que acaba en una situación de interbloqueo.

Interbloqueos sólo ocurrirá cuando se tienen dos o más bloqueos que pueden ser adquiridos en el mismo tiempo y se agarró en diferente orden.

Maneras de evitar tener interbloqueos son:

  • evitar tener cerraduras (si es posible),
  • evitar tener más de un bloqueo
  • siempre tome los bloqueos en el mismo orden.

Para definir interbloqueo, primero me gustaría definir el proceso.

Proceso de : Como sabemos el proceso no es nada sino un program en la ejecución.

De recursos : Para ejecutar un programa de proceso de las necesidades de algunos recursos.Categorías de recursos pueden incluir la memoria, las impresoras, CPUs, abrir archivos, unidades de cinta, CD-ROMS, etc.

Interbloqueo : Interbloqueo es una situación o condición cuando dos o más procesos que se están manteniendo algunos de los recursos y tratando de adquirir algunos más recursos, y que no pueden liberar los recursos hasta que termine allí ejecución.

Condición de interbloqueo o situación

enter image description here

En el diagrama de arriba hay dos procesos P1 y p2 y hay dos recursos R1 y R2.

De recursos R1 se asigna al proceso de P1 y de los recursos R2 se asigna al proceso de p2.Para completar la ejecución del proceso de P1 necesidades de recursos R2, por lo que P1 solicitud de R2, pero R2 ya se ha asignado a P2.

De la misma manera el Proceso de P2 para completar su ejecución necesidades R1, pero R1 ya se ha asignado a P1.

tanto los procesos no se pueden liberar sus recursos a menos y hasta que completa su ejecución.Por lo tanto están a la espera de otro de los recursos y que va a esperar para siempre.Así que este es un INTERBLOQUEO Condición.

Con el fin de interbloqueo de ocurrir, cuatro condiciones deben ser verdaderas.

  1. La exclusión mutua - Los recursos actualmente asignados a un solo proceso o está disponible.(Dos procesos no controlar simultáneamente el mismo recurso o estar en su crítica la sección).
  2. Espera y Espera - procesos en la actualidad la celebración de los recursos pueden solicitar nuevos recursos.
  3. No hay preferencia - Una vez que un proceso tiene un recurso, que no puede ser tomado por otro proceso o el kernel.
  4. Circular esperar - Cada proceso está esperando para obtener un recurso que se celebra por otro proceso.

y todas estas condiciones son satisfechas en el diagrama anterior.

Un interbloqueo que sucede cuando un hilo está esperando algo que nunca ocurre.

Normalmente, esto ocurre cuando un hilo está esperando en un semáforo o exclusión mutua que nunca fue puesto en libertad por el anterior propietario.

También sucede con frecuencia cuando se tiene una situación que involucra a dos hilos y dos bloqueos como este:

Thread 1               Thread 2

Lock1->Lock();         Lock2->Lock();
WaitForLock2();        WaitForLock1();   <-- Oops!

Generalmente se detectan porque las cosas que esperas que suceda nunca, o la aplicación se bloquea completamente.

Usted puede tomar un vistazo a este maravillosos artículos, en virtud de la sección Interbloqueo.Es en C#, pero la idea sigue siendo la misma para otra plataforma.Cito aquí para facilitar la lectura

Un interbloqueo se produce cuando dos hilos cada uno espera de un recurso a cabo por el otro, por lo que tampoco puede proceder.La forma más sencilla para ilustrar este es con dos cerraduras:

object locker1 = new object();
object locker2 = new object();

new Thread (() => {
                    lock (locker1)
                    {
                      Thread.Sleep (1000);
                      lock (locker2);      // Deadlock
                    }
                  }).Start();
lock (locker2)
{
  Thread.Sleep (1000);
  lock (locker1);                          // Deadlock
}

Interbloqueo es un problema común en el multiprocesamiento/multiprogramming problemas en el sistema operativo.Dicen que hay dos procesos P1, P2 y dos a nivel mundial compartido de recursos R1, R2 y en la sección crítica de los recursos que se necesitan para ser consultado

Inicialmente, el sistema operativo asigna el R1 para que el proceso P1 y R2 para el proceso P2.Como ambos procesos se ejecutan al mismo tiempo que se puede comenzar a ejecutar su código, pero el PROBLEMA surge cuando un proceso de éxitos de la sección crítica.Así que el proceso de R1 se espere a que el proceso P2 para la liberación de R2 y viceversa...Por lo que esperará para siempre (CONDICIÓN de INTERBLOQUEO).

Una pequeña ANALOGÍA...

Su Madre(OS),
Usted(P1),
Su hermano(P2),
Apple(R1),
Cuchillo(R2),
la sección crítica(corte de apple con el cuchillo).

Su madre le da la manzana y el cuchillo a su hermano en el principio.
Ambos están felices y jugando(Ejecución de sus códigos).
Alguien de ustedes quiere cortar la manzana(sección crítica) en algún momento.
Usted no quiere dar la manzana a su hermano.
Su hermano no quiere dar el cuchillo para usted.
Por lo tanto de que usted va a esperar por un largo tiempo muy largo :)

Un interbloqueo se produce cuando hay una circular de la cadena de hilos o procesos que cada uno en posesión de un recurso bloqueado y están tratando de bloquear un recurso a cabo por el siguiente elemento de la cadena.Por ejemplo, dos hilos que sostienen respectivamente Un bloqueo y bloqueo de B, y están tratando de adquirir el bloqueo de otro.

Interbloqueo se produce cuando dos hilos adquirir bloqueos que impiden que cualquiera de ellos progresando.La mejor manera de evitarlos es con un desarrollo cuidadoso.Muchos sistemas embebidos protegerse contra ellos mediante el uso de un temporizador de vigilancia (un temporizador que se reinicia el sistema, siempre que si se bloquea durante un cierto período de tiempo).

Un interbloqueo es un estado de un sistema en el que no hay un único proceso/subproceso es capaz de ejecutar una acción.Como se ha mencionado por otros, un interbloqueo es típicamente el resultado de una situación en la que cada proceso/subproceso desea adquirir un bloqueo a un recurso que ya está bloqueado por otro (o incluso el mismo) proceso/subproceso.

Existen varios métodos para encontrar ellos y evitarlos.Una es pensar muy duro y/o probar muchas cosas.Sin embargo, el trato con el paralelismo es muy difícil, y la mayoría (si no todos) la gente no será capaz de evitar por completo los problemas.

Algunos de los métodos más formales puede ser útil si usted es serio acerca de tratar con este tipo de problemas.El método más práctico que soy consciente de que es utilizar el proceso de enfoque teórico.Aquí el modelo de su sistema en algún proceso de idioma (por ejemplo,CCS, CSP, ACP, mCRL2, LOTOS) y el uso de las herramientas disponibles para (modelo)de verificación de interbloqueos (y tal vez algunas otras propiedades).Ejemplos de herramientas a utilizar son FDR, mCRL2, CADP y Uppaal.Algunas almas valientes pueden probar sus sistemas de interbloqueo libre mediante el uso simbólico de los métodos (teoremas;buscar Owicki-Gries).

Sin embargo, estos métodos formales normalmente requieren un poco de esfuerzo (por ejemplo,aprendizaje de los conceptos básicos de la teoría de los procesos).Pero supongo que es simplemente una consecuencia del hecho de que estos problemas son difíciles.

Interbloqueo es una situación que se produce cuando hay un menor número de recursos disponibles, como es requerido por los diversos procesos.Esto significa que cuando el número de recursos disponibles convertido en menos que sea solicitado por el usuario, en el momento que el proceso va en la condición de espera .Algunos tiempos de espera se incrementa más y no hay ninguna posibilidad de revisar el problema de lackness de recursos, a continuación, esta situación se conoce como punto muerto .En realidad, interbloqueo es un gran problema para nosotros y se produce sólo en la multitarea del sistema operativo .interbloqueo no puede ocurrir en una sola tarea del sistema operativo debido a que todos los recursos están ahí sólo para que la tarea que se está ejecutando actualmente......

Por encima de algunas de las explicaciones son muy buenas.Espero que esto también puede útiles:https://ora-data.blogspot.in/2017/04/deadlock-in-oracle.html

En una base de datos, cuando una sesión (por ejemplo,ora) quiere un recurso retenido por otro período de sesiones (por ejemplo,de datos), pero esa sesión (datos) también quiere un recurso que está en manos de la primera sesión (ora).Puede haber más de 2 sesiones de participar también, pero la idea será la misma.En realidad, los Interbloqueos prevenir algunas transacciones de continuar el trabajo.Por ejemplo:Supongamos, ORA de DATOS tiene Un bloqueo y las solicitudes de bloqueo de B Y SKU tiene bloqueo de B y las solicitudes de bloqueo de A.

Gracias,

Interbloqueo se produce cuando un hilo está esperando otro hilo hasta el final y viceversa.

Cómo evitar?
- Evitar Bloqueos Anidados
- Evitar Bloqueos Innecesarios
- El uso de hilo join()

¿Cómo se detecta?
ejecute este comando en el cmd:

jcmd $PID Thread.print

referencia :geeksforgeeks

Un clásico y muy simple programa para la comprensión Interbloqueo situación :-

public class Lazy {

    private static boolean initialized = false;

    static {
        Thread t = new Thread(new Runnable() {
            public void run() {
                initialized = true;
            }
        });

        t.start();

        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println(initialized);
    }
}

Cuando el hilo principal invoca Perezoso.principal, comprueba si la clase Perezoso ha sido inicializado y comienza a inicializar la clase.El hilo principal ahora establece inicializado a false , se crea e inicia un segundo plano hilo cuyo método de ejecución de conjuntos inicializado a true , y espera a que el subproceso de fondo para completar.

Esta vez, la clase es en la actualidad el ser inicializado por otro subproceso.Bajo estas circunstancias, el subproceso actual, que es el subproceso en segundo plano, espera en el objeto de la Clase hasta que se complete la inicialización.Por desgracia, el hilo que está haciendo la inicialización, el hilo principal, está a la espera para el fondo hilo para completar.Debido a que los dos hilos se espera de cada uno de los otros, la programa A un punto muerto.

El Problema De Interbloqueo

  • Primeros sistemas operativos de las computadoras corrió sólo un programa en un momento
  • Todos los recursos del sistema están disponibles para este programa
  • Más tarde, los sistemas operativos corriendo varios programas a la vez, el intercalado de ellos
  • Los programas fueron obligados a especificar de antemano qué los recursos necesarios para que pudieran evitar conflictos con otros programas corriendo al mismo tiempo
  • Finalmente, algunos sistemas operativos ofrecen la asignación dinámica de recursos
  • Los programas podrían solicitar la asignación de recursos después de que había comenzado a correr
  • Esto llevó a que el problema del interbloqueo

Un conjunto de procesos bloqueados cada uno tiene un recurso y a la espera de adquirir un recurso que se celebró por otro proceso en el conjunto

Una situación en la que 02 o más acciones están compitiendo cada uno esperando que el otro para terminar, y por lo tanto ni nunca ¿

Caracterización Del Interbloqueo

  • La Exclusión Mutua
  • Contener Y Esperar
  • No Hay Preferencia
  • Circular Esperar

Métodos para el Manejo de los Interbloqueos

  • Asegúrese de que el sistema nunca va a entrar en un estado de interbloqueo
  • Permitir que el sistema para entrar en un estado de interbloqueo y, a continuación, recuperar
  • Ignorar el problema y pretender que los interbloqueos no ocurra nunca en el sistema;utilizado por la mayoría de los sistemas operativos, incluyendo UNIX

Interbloqueo De Prevención

  • La Exclusión Mutua – no se requiere para compartir recursos;debe poseer para nonsharable recursos

  • Espera y Espera – debe garantizar que, siempre que un proceso de solicita un recurso, no es titular de todos los demás recursos

  • No Hay Preferencia – Si un proceso que está llevando a cabo algunas los recursos de las solicitudes de otro recurso que no puede ser de inmediato se le ha asignado, entonces todos los recursos que actualmente se son liberados

  • Circular Esperar – Imponer un orden total de todos los recursos tipos, y exigir que cada proceso de las solicitudes de recursos en un el aumento de orden de la enumeración

Exclusión mutua en esencia es un bloqueo, proporcionando un acceso protegido a los recursos compartidos.Bajo Linux, el hilo mutex tipo de datos es pthread_mutex_t.Antes de su uso, se inicializa.

Para acceder a los recursos compartidos, tienen que bloquear el mutex.Si el mutex ya en la cerradura, la llamada se bloquea el subproceso hasta el mutex está desbloqueado.Tras la finalización de la visita a los recursos compartidos, usted tiene que desbloquear.

En general, hay un par de no escritas principios básicos:

  • Obtener el bloqueo antes de que el uso de los recursos compartidos.

  • Si se mantiene el bloqueo como tiempo más corto posible.

  • Liberar el bloqueo si el hilo se devuelve un error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top