Le funzioni Interlocked * sono utili sulla memoria condivisa?
-
08-07-2019 - |
Domanda
Due processi Windows hanno mappato la memoria sullo stesso file condiviso. Se il file è costituito da contatori, è opportuno utilizzare le funzioni Interlocked *
(come InterlockedIncrement
) per aggiornare tali contatori? Quelli sincronizzeranno l'accesso tra i processi? O devo usare qualcosa di più pesante, come un mutex? O forse lo stesso meccanismo di memoria condivisa garantisce viste coerenti.
Soluzione
Da MSDN :
...
L'API interbloccata
Le funzioni interbloccate forniscono a semplice meccanismo per la sincronizzazione accesso a una variabile condivisa da più thread. Si esibiscono anche operazioni su variabili in un atomico maniera. I fili di diversi i processi possono utilizzare queste funzioni se la variabile è nella memoria condivisa.
Quindi, sì, è sicuro con il tuo approccio alla memoria condivisa.
Altri suggerimenti
Le funzioni interbloccate sono destinate esattamente a quel tipo di utilizzo.
Da http://msdn.microsoft.com/en-us/ biblioteca / ms684122.aspx :
I thread di diversi processi possono usare queste funzioni se la variabile è nella memoria condivisa.
Ovviamente, se è necessario aggiornare più di un elemento in modo atomico, è necessario utilizzare un mutex o un altro oggetto di sincronizzazione che funzioni attraverso i processi. Non c'è nulla di incorporato nel meccanismo di memoria condivisa per fornire la sincronizzazione per accedere alla memoria condivisa - dovrai usare le funzioni interbloccate o un oggetto di sincronizzazione.