Se dois processos partilham a mesma zona de memória, então podem usá-la para comunicarem entre si. Esta é a forma mais rápida de comunicação que existe entre processos. De qualquer forma, é necessário ter muito cuidado para que dois processos não tentem aceder a essa zona de memória em simultâneo, ou para que, esse acesso seja estudado e previsto, sob pena da obtenção de resultados incorrectos.
Eis um exemplo:
Atente no pedaço de código que se segue e onde dois processos partilham uma variável.
v[10]={1,2,3,4,5,6,7,8,9,10}; count=0; /* process One */ for (i=1;i=5;i++) count++; /* process One */ for (i=1;i=5;i++) count++;
Olhando para esta secção, poder-se-ia pensar que o resultado final da variável
count seria 10, porém, exsite uma grande probabilidade de que essa ideia esteja
errada.
Em código máquina, a parte incremental do código, é a seguinte:
load reg, count add reg, 1 store count, reg
Quando se considera, agora, estas mesmas linhas mas para a execução de dos processos
em simultâneo, é muito possível que, a dada altura, ocorra algo como isto:
process One process Two 1. load reg1, count 2. load reg2, count 3. add reg2, 1 4. store reg2, 1 5. add reg1, 1 6. store count, reg1
Para que isso não aconteça, resultando, daí, , é
necessário considerar a secção do código em que se acede a essa zona de memória
partilhada como sendo uma
secção crítica,
a qual deve ser tratada com os
mecanismos de sincronização para
competição de um recurso.