Alcanzar la seguridad del hilo

Pregunt ¿Cómo puedo asegurarme de que mi aplicación sea segura para subprocesos? ¿Son prácticas comunes, métodos de prueba, cosas que deben evitarse, cosas que deben buscarse?

Fond Actualmente estoy desarrollando una aplicación de servidor que realiza una serie de tareas en segundo plano en diferentes subprocesos y se comunica con los clientes que usan Indy (usando otro grupo de subprocesos generados automáticamente para la comunicación). Dado que la aplicación debería estar altamente disponible, un bloqueo del programa es algo muy malo y quiero asegurarme de que la aplicación sea segura para subprocesos. Pase lo que pase, de vez en cuando descubro un código que arroja una excepción que nunca antes había ocurrido y, en la mayoría de los casos, me doy cuenta de que se trata de algún tipo de error de sincronización, donde olvidé sincronizar mis objetos correctamente. De ahí mi pregunta sobre las mejores prácticas, las pruebas de seguridad de subprocesos y cosas así.

mghie: ¡Gracias por la respuesta! Quizás debería ser un poco más preciso. Para ser claros, conozco los principios de subprocesamiento múltiple, uso sincronización (monitores) en todo mi programa y sé cómo diferenciar los problemas de subprocesamiento de otros problemas de implementación. Sin embargo, sigo olvidando agregar una sincronización adecuada de vez en cuando. Solo para dar un ejemplo, utilicé la función de clasificación RTL en mi código. Parecía algo así como

FKeyList.Sort (CompareKeysFunc);

Resulta que tuve que sincronizar FKeyList mientras ordenaba. Simplemente no me vino a la mente al escribir inicialmente esa simple línea de código. De estos delgados quiero hablar. ¿En qué lugares se olvida fácilmente agregar código de sincronización? ¿Cómo se asegura de agregar código de sincronización en todos los lugares importantes?

Respuestas a la pregunta(7)

Su respuesta a la pregunta