Dans une application C#, supposons que j'ai une seule classe mondiale qui contient des éléments de configuration, comme suit:C# fil de sécurité des paramètres de configuration globale
public class Options
{
int myConfigInt;
string myConfigString;
..etc.
}
static Options GlobalOptions;
les membres de cette classe seront utilisations à travers différents threads:
Thread1: GlobalOptions.myConfigString = blah;
tout
Thread2: string thingie = GlobalOptions.myConfigString;
Utilisation d'un cadenas pour l'accès aux GlobalOptions L'objet serait également inutile lorsque 2 threads accèdent à des membres différents, mais d'un autre côté, créer un objet de synchronisation pour chaque membre semble également un peu trop haut. De plus, utiliser un verrou sur les options globales rendrait mon code moins sympa je pense; si je dois écrire
string stringiwanttouse;
lock(GlobalOptions)
{
stringiwanttouse = GlobalOptions.myConfigString;
}
partout (et est-ce thread-safe ou est stringiwanttouse maintenant juste un pointeur vers myConfigString? Oui, je suis nouveau à C# ....) au lieu de
string stringiwanttouse = GlobalOptions.myConfigString;
cela rend le code horrible.
Alors ... Quelle est la meilleure (et la plus simple!) Façon d'assurer la sécurité des filetages?
Je pense que ce serait encore plus clair si vous pouviez spécifier quel problème vous essayez de résoudre. Il n'y a pas de danger inhérent à deux threads définissant une valeur globale à peu près au même moment. Le CLR ne va pas tomber en panne. Quel genre de problème de synchronisation essayez-vous de résoudre? – PeterAllenWebb
Eh bien, que se passe-t-il lorsqu'un thread écrit dans une chaîne alors qu'un autre essaie de le lire? Est-ce que j'obtiendrai toujours l'une ou l'autre chaîne, ou est-ce que je pourrais avoir une chaîne partiellement écrasée? – Led