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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top