In base a an article su IBM.com, "una condizione di competizione è una situazione in cui due o più thread o processi stanno leggendo o scrivendo alcuni dati condivisi, e il risultato finale dipende dalla tempistica di come sono programmati i thread. può portare a risultati imprevedibili e bug di programma sottili. " . Sebbene l'articolo riguardi Java, in generale mi è stata insegnata la stessa definizione.Che dire delle condizioni di gara nella lettura multithread?
Per quanto ne so, la semplice operazione di lettura dalla RAM è composta dall'impostazione degli stati di specifiche linee di ingresso (indirizzo, lettura ecc.) E dalla lettura degli stati delle linee di uscita. Questa è un'operazione che ovviamente non può essere eseguita simultaneamente da due dispositivi e deve essere serializzata.
Ora supponiamo di avere una situazione in cui un paio di thread accedono a un oggetto in memoria. In teoria, questo accesso dovrebbe essere serializzato per prevenire condizioni di gara. Ma ad es. l'algoritmo di lettori/scrittori presuppone che un numero arbitrario di lettori possa utilizzare la memoria condivisa allo stesso tempo.
Quindi, la domanda è: è necessario implementare un blocco esclusivo per la lettura quando si utilizza il multithreading (in WinAPI, ad esempio)? Se no, perché? Dove viene implementato questo controllo: sistema operativo, hardware?
Con i migliori saluti, Kuba
hah, said'ya;] –