Pergunta

a minha pergunta é um pouco conceitual, como é o processo pai' de dados compartilhado com o processo filho criado por um fork() ligue ou com uma thread criada por pthread_create()

por exemplo, são variáveis globais diretamente transmitido para o processo filho e se for o caso, a modificação de que a variável feita por processo filho do efeito valor da ti no processo principal?

eu aprecio parcial e completa respostas com antecedência, se eu estou faltando algum recurso existente, me desculpe, eu fiz alguma pesquisa no google, mas não consegui encontrar bons resultados

obrigado novamente por seu tempo e respostas

Foi útil?

Solução

A semântica do fork() e pthread_create() são um pouco diferentes.

fork() cria um novo processo, onde as variáveis globais serão separados entre pai e filhos.A maioria dos implementações uso de cópia-na-gravação semântica, o que significa que o pai e o filho processo irá utilizar as mesmas páginas de memória física para todas as variáveis globais até que um dos processos de tentativas para editar a memória física, em que ponto uma cópia do que a página é feita, de modo que agora cada processo obtém a sua própria cópia e não ver o outro processo, de modo que os processos são isolados.

pthread_create() por outro lado, cria um novo segmento dentro do mesmo processo.A nova linha vai ter uma pilha separada do espaço de execução de threads do mesmo processo, no entanto, as variáveis globais e de espaço de pilha são compartilhadas entre todas as threads de um mesmo processo.É por isso que muitas vezes você precisa de um mutex para coordenar o acesso a uma compartilhado pedaço de memória entre vários threads de um mesmo processo.

TL;DR versão:com o fork(), você não vê o outro cara alterações;com pthread_create() você faz.

Outras dicas

Um fork cria uma cópia quase exata do processo de chamada, incluindo a memória e descritores de arquivo.Variáveis globais são copiados juntamente com tudo o mais, mas eles não são de qualquer forma vinculada ao processo principal.Desde descritores de arquivo também são copiados, pai e filho podem interagir através destas (contanto que eles estão a instalação corretamente, geralmente através de um tubo ou socketpair).

Há uma grande diferença entre os processos criados por fork e entre threads criados com pthread_create.Processos não compartilham variáveis globais e devem se comunicar através de pipes, sockets, ou outras ferramentas fornecidas pelo sistema operacional.Uma boa solução MPI - o que é uma mensagem de passagem de biblioteca para comunicação entre processos.

Threads são bastante diferentes.Um thread criado com pthread_create compartilha todas as variáveis globais com o seu chamador.Além disso, o chamador pode passar de uma estrutura arbitrária para o segmento, e essa estrutura também serão compartilhados.Isto significa que deve-se ser extremamente cuidadoso quando a programação com threads - tais quantidades de compartilhamento de são perigosos e propenso a erro.O pthread A API fornece mutexes e condições robustas de sincronização entre threads (embora ele ainda requer prática e experiência para implementar corretamente).

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