Pergunta

processos

Duas janelas têm memória mapeada no mesmo arquivo compartilhado. Se o arquivo é composto por contadores, é apropriado usar as funções Interlocked* (como InterlockedIncrement) para atualizar os contadores? Será que aqueles de acesso de sincronização entre processos? Ou eu preciso usar algo mais pesado, como um mutex? Ou talvez o mecanismo de memória compartilhada em si garante vistas consistentes.

Foi útil?

Solução

A partir MSDN :

...

O Interlocked API

As funções bloqueadas fornecer uma mecanismo simples para sincronização acesso a uma variável que é compartilhada por vários segmentos. Eles também realizam operações sobre variáveis ??em um atômica maneira. Os fios de diferentes processos podem usar essas funções se a variável está na memória compartilhada.

Então, sim, é seguro com a sua abordagem de memória compartilhada.

Outras dicas

As funções interligadas são destinados para exatamente esse tipo de uso.

A partir http://msdn.microsoft.com/en-us/ biblioteca / ms684122.aspx :

Os fios de diferentes processos pode utilizar estas funções, se a variável está na memória compartilhada.

Claro que, se você precisa de ter mais do que um item atualizado atomicamente, você precisa ir com um mutex ou algum outro objeto de sincronização que funciona em processos. Não há nada de built-in para o mecanismo de memória compartilhada para fornecer sincronização de acesso à memória compartilhada -. Você vai precisar usar as funções bloqueados ou um objeto de sincronização

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top