2010-02-26 14 views
7

Diciamo che ho un po 'variabile x (di tipo myClass), che inizialmente è null e alcuni assegnazione.net: sta assegnando un riferimento oggetto atomico (cioè thread-safe)?

x = myObject 

verificano esattamente una volta in qualche thread in background.

È garantito che x contenga sempre null o myObject quando si accede dal thread principale? Oppure è possibile che x contenga alcuni dati non validi a breve?

+2

controllare questo articolo http://msmvps.com/blogs/luisabreu/archive/2009/06/29/multithreading-hardware-atomicity.aspx –

risposta

6

Se la dimensione del riferimento del tipo è uguale alla dimensione della parola nativa della CPU, l'assegnazione sarà atomica (e sicura nello scenario descritto).

In effetti, (non ho il riferimento alla mano) sono abbastanza sicuro che un ref di tipo avrà sempre la stessa dimensione della dimensione della parola della CPU nativa.

+4

Ecco il riferimento: Partizione I, Sezione 12.6.6 delle specifiche della specifica CLI : 'Una CLI conforme garantirà che l'accesso in lettura e scrittura a posizioni di memoria correttamente allineate non più grandi della dimensione nativa della parola sia atomico quando tutti gli accessi in scrittura a una posizione sono della stessa dimensione. Anche senza citare le specifiche sei stato il primo a fornire una risposta corretta. –

+0

@Darin Dimitrov: non so perché hai cancellato la tua risposta, dopotutto era corretto. –

+2

Ho cancellato la mia risposta perché non fornisce alcuna informazione utile aggiuntiva rispetto alla risposta. –

1

Da this (sebbene si tratti di un argomento leggermente diverso) Concludo che gli incarichi sono atomc.

Problemi correlati