C ++: É possível compartilhar um ponteiro através de processos bifurcados?

StackOverflow https://stackoverflow.com/questions/650770

  •  19-08-2019
  •  | 
  •  

Pergunta

Eu tenho uma variável de contagem que deve começar contadas por alguns processos I bifurcadas e usados ??/ lidos pelo processo mãe.

Eu tentei criar um ponteiro na minha função main () do processo mãe e contar esse ponteiro-se nas crianças bifurcadas. Isso não funciona! Cada criança parece ter a sua própria cópia mesmo que o endereço é o mesmo em cada processo.

Qual é a melhor maneira de fazer isso?

Foi útil?

Solução

Cada criança recebe sua própria cópia da memória processos pai (pelo menos assim que trys para modificar nada). Se você precisa compartilhar betweeen processos que você precisa olhar para a memória compartilhada ou algum mecanismo IPC similar.

BTW, por que você está fazendo deste um wiki comunidade -. Você pode estar limitando as respostas ao fazê-lo

Outras dicas

2 processos não podem compartilhar a mesma memória. É verdade que um processo filho bifurcada irá compartilhar a mesma memória subjacente após a bifurcação, mas uma tentativa de gravação a este faria com que o sistema operacional para alocar um novo espaço gravável para ele em outro lugar.

Olhe em outra forma de IPC para uso.

A minha experiência é que, se você quiser compartilhar informações entre pelo menos dois processos, você quase nunca querem compartilhar apenas algumas ponteiro void * na memória. Você pode querer ter um olhar para

Aumento interprocess

que pode lhe dar uma ideia, como compartilhar dados estruturados (leia-se "classes" e "estruturas") entre processos.

Não, uso IPC ou threads. Somente descritores de arquivos são compartilhados (mas não o ponteiro buscar).

Você pode querer verificar a memória compartilhada.

os ponteiros são sempre mentiras no mesmo processo. É privada para o processo, em relação ao endereço de base do processo. Existem diferentes tipos de mecanismos de IPC disponíveis em qualquer sistema operacional. Você pode optar por Windows Messaging, memória compartilhada, socket, tubulações etc. Escolha um de acordo com sua necessidade e tamanho dos dados. Outro mecanismo é a gravação de dados no processo de destino usando APIs memória virtual disponível e notificar o processo com o ponteiro correspondente.

Uma opção simples, mas forma limitada de IPC que iria trabalhar bem para uma contagem compartilhada é um 'segmento de dados partilhada'. No Windows isso é implementado usando a diretiva #pragma data_seg.

Veja este artigo para um exemplo.

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