En una aplicación de C#, supongamos que tengo una sola clase mundial que contiene algunos elementos de configuración, así:C de seguridad # hilo de parámetros de configuración globales
public class Options
{
int myConfigInt;
string myConfigString;
..etc.
}
static Options GlobalOptions;
los miembros de esta clase será usos a través de diferentes temas:
Thread1: GlobalOptions.myConfigString = blah;
mientras
Thread2: string thingie = GlobalOptions.myConfigString;
Usando un bloqueo para el acceso a los GlobalOptions objeto también sería innecesario bloquear cuando 2 hilos están accediendo a miembros diferentes, pero por otro lado la creación de un objeto de sincronización para cada miembro también parece un poco exagerado.
Además, usar un bloqueo en las opciones globales haría que mi código fuera menos agradable, creo; si tengo que escribir
string stringiwanttouse;
lock(GlobalOptions)
{
stringiwanttouse = GlobalOptions.myConfigString;
}
todas partes (y es este thread-safe o es stringiwanttouse ahora sólo un puntero a myConfigString? Sí, soy nuevo en C# ....) en lugar de
string stringiwanttouse = GlobalOptions.myConfigString;
hace que el código se vea horrible.
Así que ... ¿Cuál es la mejor (y la más simple) forma de garantizar la seguridad de las hebras?
Creo que sería más claro aún si pudiera especificar qué problema está tratando de resolver. No hay peligro inherente en dos hilos que establecen un valor global más o menos al mismo tiempo. El CLR no se bloqueará. ¿Qué tipo de problema de sincronización estás tratando de resolver? – PeterAllenWebb
Bueno, ¿qué sucede cuando un hilo está escribiendo en una cadena mientras que otro está tratando de leerlo? ¿Obtendré siempre una cadena u otra, o podría suceder que recibo una cadena sobrescrita parcialmente? – Led