Tenga en cuenta que puede hacer esencialmente todo en delphi unthreadsafe. Mientras que otros mencionan problemas de alineación en booleano esto oculta de alguna manera el problema real.
Sí, puede leer un valor booleano en cualquier hilo y escribir en un booleano en cualquier hilo si está alineado correctamente. Pero leer de un booleano que cambie no necesariamente es "seguro para subprocesos" de todos modos. Supongamos que tiene un booleano que establece en verdadero cuando ha actualizado un número para que otro hilo lea el número.
if NumberUpdated then
begin
LocalNumber = TheNumber;
end;
Debido a las optimizaciones del procesador hace Thenumber puede leerse antes de leer NumberUpdated, por tanto, es posible obtener el valor antiguo de Thenumber eventhough informado NumberUpdated pasado.
Aka, su código puede llegar a ser:
temp = TheNumber;
if NumberUpdated the
begin
LocalNumber = temp;
end;
En mi humilde opinión, una regla básica:
". Lee es seguro para subprocesos escrituras no es seguro para subprocesos"
Así que si va a hacer una escritura proteger los datos con la sincronización en todas partes lee el valor mientras se puede escribir potencialmente.
Por otro lado, si solo lee y escribe un valor en un hilo, entonces es seguro para subprocesos. Entonces puede hacer una gran cantidad de escritura en una ubicación temporal, luego sincronizar una actualización de los datos de toda la aplicación.
Bonus propaganda:
El VCL no es hilo de seguridad. Mantenga todas las modificaciones de cosas ui en el hilo principal. Mantenga la creación de todas las cosas de la interfaz de usuario en el hilo principal también.
Muchas funciones tampoco son seguras para hilos, mientras que otras sí lo son, a menudo depende de las llamadas a winapi subyacentes.
No creo que una "lista" sea útil, ya que "thread safe" puede significar muchas cosas.
+1, muy buenos puntos. Para cualquier persona interesada, consulte, por ejemplo, http://en.wikipedia.org/wiki/Memory_barrier y la información vinculada. – mghie