hasta el momento, pensé que cualquier operación realizada en el objeto "compartido" (común para múltiples hilos) debe ser protegida con "sincronizar", no importa qué. Aparentemente, estaba equivocado: en el código que estoy estudiando recientemente hay muchas clases (seguras para subprocesos, como afirma el autor) y solo una de ellas usa la sección crítica para casi todos los métodos.Enhebrado Delphi: ¿qué partes del código deben protegerse/sincronizarse?
¿Cómo puedo encontrar qué partes/métodos de mi código deben protegerse con CriticalSection (o cualquier otro método) y cuáles no?
Hasta ahora no he tropezado con ninguna explicación nota/artículo/blog interesante, todos los resultados de Google son:
a) Ejemplos de sincronización entre el hilo y la interfaz gráfica de usuario. Desde la barra de progreso simple hasta la más compleja, pero la lección es obvia: cada vez que accede/modifica la propiedad del componente de la GUI, haga eso en "Sincronizar". Pero nada más.
b) artículos que explican las Secciones críticas, Mutexes, etc. Solo unos enfoques diferentes de protección/sincronización.
c) Ejemplos de clases de seguridad de subprocesos muy simples (pila o lista de subprocesos) - todos hacen lo mismo - implementan métodos de bloqueo/desbloqueo que entran/salen de la sección crítica y devuelven el puntero de pila/lista real cierre.
Ahora estoy buscando la explicación qué partes del código deben protegerse.
podría ser en forma de código;) pero por favor no me dan uno más "usando Sincronizar para actualizar progressbar" ...;)
gracias!
No quiero una respuesta más específica. De hecho, incluso estoy buscando más generales. Necesito aprender mucho acerca de cómo enhebrar, y estoy buscando un buen "punto de entrada";) Especialmente dado que estoy usando Delphi desde la versión 6 y NUNCA he visto la declaración de ThreadVar ... – migajek
Por cierto, no debería ser el tercer punto ser "intentar NO usar ..."? ;) – migajek
@migajek: No, el tercer punto es correcto. jachguate está diciendo qué dos hilos podrían estar haciendo que requerirían sincronización. –