Eventuali duplicati:
Are C# arrays thread safe?Più thread di accesso stesso array multidimensionale
mi sono stati di programmazione C# per 10 mesi. Ora sto imparando il multi-threading e sembra funzionare bene. Ho un array multi-dimensionale come
string[,] test = new string[5, 13];
Ho i metodi di chiamata dei thread che finiscono per salvare i loro output su coordinate diverse all'interno dell'array sopra. senza scrivere un thread nella stessa posizione di un altro thread.
Così Thread1 potrebbe scrivere a test[1,10]
ma nessun altro thread sarà mai scrivere a test[1,10]
La mia domanda è: ho letto su come utilizzare le serrature su oggetti come il mio array, devo preoccuparsi affatto sui blocchi anche se i miei thread potrebbero accedere allo stesso array di test contemporaneamente ma non scrivere mai le stesse coordinate (posizione di memoria)?
Finora nei test non ho avuto problemi, ma se qualcuno più esperto di me sa che potrei avere problemi allora cercherò di usare le serrature.
No, non è necessario il blocco nello scenario illustrato. Ma presumo che tu stia leggendo i dati ad un certo punto? Aspetti fino a quando tutti i tuoi thread hanno finito prima di iniziare a leggere? – Douglas
Se non si utilizzano i blocchi, sarebbe consigliabile introdurre una barriera di memoria (chiamando 'Thread.MemoryBarrier()') prima di iniziare a leggere, in modo da garantire che tutti i thread abbiano accesso ai dati 'freschi'. [Sincronizzazione non bloccante] (http://www.albahari.com/threading/part4.aspx) ha una grande spiegazione su questo concetto. – Douglas
grazie, i thread sono generati da un singolo thread master, scrivono solo i dati sull'array, quindi, una volta che tutti terminano, RunWorkerCompleted dal thread master, legge l'array. quindi penso di essere al sicuro, grazie per la spiegazione. –