una thread the than subproceso que para other new llamó interfaz from example diferente delegate created control aplicación aplanó accessed multithreading delphi semaphore critical-section

multithreading - thread - ¿Cómo puedo implementar un contenedor de listas de subprocesos seguros en Delphi?



ui thread c# (3)

Tengo un contenedor de lista que mantiene dos Tstringlists y un TClassList

Necesito que esto sea seguro para hilos, de modo que:

  • Las escrituras concurrentes no están permitidas (se debe ingresar el estado de espera de algún tipo)
  • No se permite leer mientras se escribe (o viceversa) (se debe ingresar el estado de espera de algún tipo)
  • Se permiten lecturas concurrentes

¿Alguna idea sobre cómo puedo hacer esto? Mi instinto me dice que necesita algo más que una sección crítica, tal vez un semáforo o "contador de uso", quizás uno de estos junto con un CS.

No estoy muy seguro de por dónde empezar, cualquier cosa, desde un enfoque general en inglés hasta un código psuedo, hasta la implementación de delphi o un enlace externo sería muy apreciado.


Debería echar un vistazo a la clase TMultiReadExclusiveWriteSynchronizer declarada en sysutils.pas ...



Deberías mirar TThreadList.

Los métodos .Add, .Remove, .Clear bloquean automáticamente la lista por usted. Si es necesario, también puede bloquear / desbloquear según sea necesario:

x.LockList; try //do whatever finally x.Unlocklist; end;

TMultiReadExclusiveWriteSynchronizer es una gran idea, pero no sé si alguna vez planchó todos los errores. Siempre ha tenido problemas bajo carga.