Pregunta

¿Cuáles son las mejores prácticas / expresiones idiomáticas que alguien debe seguir para evitar puntos muertos?

Otros consejos

Hay cuatro condiciones que deben ocurrir para que se produzca un punto muerto:

  1. Condición de exclusión mutua: un recurso que no puede ser utilizado por más de un proceso a la vez

  2. Condición de espera y espera: los procesos que ya tienen recursos pueden solicitar nuevos recursos

  3. Sin condición de preferencia: ningún recurso puede eliminarse por la fuerza de un proceso que lo contiene, los recursos solo pueden liberarse por la acción explícita del proceso

  4. Condición de espera circular: dos o más procesos forman una cadena circular donde cada proceso espera un recurso que contiene el siguiente proceso en la cadena

Evita al menos uno de estos, y preferiblemente más, y no deberías tener demasiados problemas.

Existe el llamado Algoritmo del banquero , para evitar puntos muertos. También puede considerar el uso de Watch Dog para romper el punto muerto del formulario. Aquí también hay algunos puntos interesantes.

La técnica canónica para evitar el punto muerto es tener una jerarquía de bloqueo. Asegúrese de que todos los hilos adquieran bloqueos u otros recursos en el mismo orden. Esto evita el escenario de punto muerto donde el subproceso 1 mantiene el bloqueo A y necesita el bloqueo B, mientras que el subproceso 2 mantiene el bloqueo B y necesita el bloqueo A. Con una jerarquía de bloqueo, ambos hilos tendrían que adquirir los bloqueos en el mismo orden (por ejemplo, A antes de B) .

La mejor práctica sería definir una clase para su hilo y usar solo campos no estáticos de esta clase en su hilo para que sus hilos no compartan ninguna memoria.
Por supuesto, para evitar puntos muertos también puede evitar el uso de semáforos, secciones críticas y mutexes. Menos es mejor, si quieres evitar puntos muertos. Desafortunadamente, estos son necesarios si se comparte algo de memoria u otro recurso entre dos hilos o si corre el riesgo de corrupción de datos.

Entre los diversos métodos para ingresar secciones críticas, los semáforos y mutexs son los más populares.

  • Un semáforo es un mecanismo de espera y mutex es un mecanismo de bloqueo, bueno, el concepto es muy confuso, pero en resumen, un hilo que activa un mutex solo puede desactivarlo. con esto en mente ...

  • No permita que ningún proceso bloquee el número parcial de recursos, si un proceso necesita 5 recursos, espere hasta que todos estén disponibles.

  • si usa semáforo aquí, puede desbloquear / desbloquear el recurso ocupado por otro hilo. con esto quiero decir que la preferencia es otra razón.

Estas 2 según mí son las condiciones básicas, las 2 precauciones restantes de las 4 precauciones comunes pueden estar relacionadas con estas.

Si no está de acuerdo ps agregue comentarios. Ya llegué tarde, luego agregaré una explicación más limpia y clara.

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