Su una macchina quad-core, sto considerando la parallelizzazione dell'algoritmo C# /. NET che implica l'avere simultaneamente più thread che leggono la piccola int [] array. Fino ad ora sembra funzionare piuttosto bene, ma non sono sicuro di dove sia specificato che le letture simultanee su un array siano thread-safe in .NET. Qualche indicazione?Accesso simultaneo in lettura su un array int []: è sicuro? È veloce?
Quindi, mi chiedo anche se questo approccio è davvero efficiente? Ci sono situazioni in cui è meglio duplicare effettivamente i dati di input per ogni thread, in modo che non ci sia alcuna lettura simultanea e ogni array (forse?) Abbia l'opportunità di essere memorizzato nella cache vicino alla CPU di affinità?
Qualche idea sulle migliori pratiche relative alle CPU multicore?
Sono pienamente d'accordo con te sul fatto che i dati immutabili sono thread-safe. A volte, tuttavia, è difficile determinare se i dati non cambieranno. Ad esempio, un'operazione di lettura apparente (o diciamo 'metodo query') su un oggetto può causare una scrittura internamente. Devi sempre essere alla ricerca di questo. Tuttavia con gli array: la lettura dell'array non la cambierà sicuramente. – Steven
@Steven concorda sul fatto che non si può sempre dire se qualcosa è immutabile. Ma penso che il tuo esempio sia semplicemente un cattivo design. Credo che i dati immutabili (specialmente se condivisi) dovrebbero essere esplicitamente progettati come tali. –
@Marthinho: Non hai idea di quanto cattivo design ho visto nella mia carriera :-) Mi ha reso uno sviluppatore compulsivo e sospettoso. Non mi fido di nessuno, nemmeno di me stesso :-) Tuttavia, sono d'accordo con tutto ciò che hai detto qui. – Steven