Sono stato a conoscenza del blocco sui thread e non ho trovato una spiegazione per perché la creazione di un tipico System.Object, il suo blocco e l'esecuzione di qualsiasi azione richiesta durante il blocco fornisce la sicurezza del thread?Perché la magia fa bloccare un'istanza di System.Object in modo diverso rispetto al blocco di un tipo di istanza specifico?
Esempio
object obj = new object()
lock (obj) {
//code here
}
In un primo momento ho pensato che fosse solo di essere utilizzato come un segnaposto negli esempi e pensato per essere scambiato con il tipo che si sta trattando. Ma trovo che esempi come Dennis Phillips punti, non sembra essere qualcosa di diverso rispetto all'utilizzo di un'istanza di Object.
Quindi, prendendo un esempio di dover aggiornare un dizionario privato, ciò che il blocco un'istanza di System.Object fare per fornire la sicurezza dei thread in contrasto con il blocco in realtà il dizionario (lo so il blocco del dizionario in questo caso potrebbe tra maiuscole e problemi di sincronizzazione)? E se il dizionario fosse pubblico?
//what if this was public?
private Dictionary<string, string> someDict = new Dictionary<string, string>();
var obj = new Object();
lock (obj) {
//do something with the dictionary
}
Se sei preoccupato che il 'dizionario' sia pubblico, scrivi (o copia) un wrapper' Dictionary' racchiude tutte le funzionalità in un 'lock'. Vedi [Qual è il modo migliore di implementare un dizionario thread-safe in .NET?] (Http://stackoverflow.com/questions/157933) per esempi e spiegazioni. O semplicemente usa un ['ConcurrentDictionary'] (http://msdn.microsoft.com/en-us/library/dd287191.aspx) – Brian