Hay muchos artículos y discusiones que explican por qué es bueno crear clases seguras para subprocesos. Se dice que si múltiples subprocesos tienen acceso, p. un campo al mismo tiempo, solo puede haber algunas malas consecuencias. Entonces, ¿cuál es el punto de mantener no código seguro para subprocesos? Me estoy enfocando principalmente en .NET, pero creo que las razones principales no dependen del idioma.¿Para qué no es seguro para hilos?
E.g. Los campos estáticos de .NET no son seguros para subprocesos. ¿Cuál sería el resultado si fuera seguro para subprocesos de forma predeterminada? (sin necesidad de realizar un bloqueo "manual"). ¿Cuáles son los beneficios de usar (en realidad, por defecto) seguridad sin hilos?
Una cosa que me viene a la mente es el rendimiento (más que una conjetura, sin embargo). Es bastante intuitivo que, cuando una función o campo no necesita ser seguro para subprocesos, no debería serlo. Sin embargo, la pregunta es: ¿para qué? ¿La seguridad de los hilos es solo una cantidad adicional de código que siempre debe implementar? En qué escenarios puedo estar 100% seguro de que, p. un campo no será utilizado por dos hilos a la vez?
¿Pero cuándo definitivamente puedes decir que una DLL nunca usará threading? ¿Qué pasa con los clientes, a quienes les gustaría experimentar con su biblioteca? ¿Debería uno hacer que todos los métodos públicos sean seguros para subprocesos? En cuanto a la furgoneta: a algunas personas les gusta presumir. :) – pbalaga
@rook: recuerde, si es una buena biblioteca no tiene que preocuparse por cómo implementa las cosas: nunca debe darle acceso a cosas que no son seguras a menos que las marque con mucho cuidado. – Crisfole
@rook: con respecto a los clientes que experimentan con su biblioteca, a menos que esté documentando explícitamente que un método es seguro para subprocesos, es seguro asumir que no es así. Los clientes asumen la responsabilidad de mantener la seguridad de las secuencias al usar sus clases. – Juliet