Etant donné qu'une Collection, par exemple, n'est pas un trio :
var myDic = new Dictionary<string, string>();
Dans un environnement multithread, ceci lancera :
string s = null;
if (!myDic.TryGetValue("keyName", out s)) {
s = new string('#', 10);
myDic.Add("keyName", s);
}
Pendant qu'un thread travaille en essayant d'ajouter la paire KeyValuePair au dictionnaire myDic, un autre peut TryGetValue(). Comme les collections ne peuvent pas être lues et écrites en même temps, une exception se produira.
Cependant, d'un autre côté, si vous essayez ceci :
// Other threads will wait here until the variable myDic gets unlocked from the preceding thread that has locked it.
lock (myDic) {
string s = null;
if (!myDic.TryGetValue("keyName", out s)) {
s = new string('#', 10);
myDic.Add("keyName", s);
}
} // The first thread that locked the myDic variable will now release the lock so that other threads will be able to work with the variable.
Ainsi, le deuxième thread essayant d'obtenir la même valeur de clé "keyName" n'aura pas à l'ajouter au dictionnaire puisque le premier thread l'a déjà ajoutée.
En résumé, threadsafe signifie qu'un objet peut être utilisé par plusieurs threads en même temps, ou qu'il verrouillera les threads de manière appropriée pour vous, sans que vous ayez à vous soucier de la threadsafety.
2. Je ne pense pas que GhostScript est maintenant threadsafe. Il utilise principalement plusieurs threads pour effectuer ses tâches, ce qui lui permet d'offrir de meilleures performances, c'est tout.
3. En fonction de votre budget et de vos besoins, cela peut être intéressant. Mais si vous construisez autour d'un wrapper, vous ne pouvez peut-être verrouiller() que lorsque cela est pratique, ou si vous n'utilisez pas le multithreading vous-même, il n'est certainement pas utile de payer pour la threadsafety. Cela signifie seulement que si VOTRE application utilise le multithreading, vous ne subirez pas les conséquences d'une bibliothèque qui n'est pas threadsafe. À moins que vous n'utilisiez réellement le multithreading, il n'est pas utile de payer pour une bibliothèque threadsafe.