Problemas devido a gravações simultâneas independentes na memória compartilhada

0

Na verdade, gostaria de saber os problemas causados por gravações simultâneas independentes na memória compartilhada.

Para ser mais elobarote, considere que temos três processos (proc1, proc2, proc3). Esses 3 processos estão tentando usar um buffer de anel baseado em IPC de memória compartilhada. Quando proc1 faz gravações simultâneas em buffer de anel adquirindo um bloqueio, o que acontece com proc2 e proc3 esperando no bloqueio. O proc1, obviamente, segurará proc2 e proc3, impedindo suas outras atividades.

Alguém pode me ajudar a explicar, quais são os problemas que enfrentamos no cenário acima e o que poderia ser uma solução eficiente para isso?

Obrigado antecipadamente!

    
por Karthick 23.01.2018 / 00:24

1 resposta

0

O problema com esses três processos seria que eles poderiam prejudicar os dados uns dos outros. Seu buffer de anel tem uma variável de índice de leitura, uma variável de índice de gravação e, digamos, 10 locais.

Digamos que a variável de índice aponte para o local # 4.

Digamos que o processo 1 queira adicionar ao buffer. Assim, o processo um recupera a variável de índice de gravação, grava seus dados no local 4 e incrementa o índice de gravação, portanto, é agora o número 5. Até agora, tudo funciona lindamente.

Agora os processos 2 e 3 desejam adicionar ao buffer. Processo 2 recupera o índice de gravação e vê # 5. O processo 3 recupera o índice de gravação e também vê o nº 5. Então o processo 2 grava seus dados no local 5, mas isso é imediatamente destruído pelo processo 3 (que viu a mesma localização depois de tudo!) Finalmente, o processo 2 e 3 ambos incrementam o índice de gravação. Dependendo do momento e da sua implementação exata, o índice de gravação pode acabar sendo 6 ou 7.

Uma solução para este problema é tornar toda a operação atômica - o que significa que o processo 3 não consegue fazer nada no buffer de anel até que o processo 2 tenha terminado. Isso é o que uma fechadura faz.

    
por 23.01.2018 / 02:26