Questão
Considere o programa abaixo escrito em linguagem C. No instante da execução da linha 5, ter-se-á uma hierarquia composta de quantos processos e threads, respectivamente?
1 2 3 4 5 6 | main(){ int i; for(i=0;i<3;i++) fork(); while(1); } |
- (A) 1 e 0.
- (B) 3 e 0.
- (C) 4 e 1.
- (D) 7 e 7.
- (E) 8 e 8.
Resolução
Quando chamada, a função fork()
em C (uma chamada de sistema) cria um novo processo, denominado processo filho, que será executado concorrentemente com o processo pai.
Tanto o processo pai como o processo filho executarão a próxima instrução do programa.
Observe que nas linhas 3-4, temos três chamadas fork()
seguidas. Ou seja, após a primeira chamada, teremos dois processos.
Cada um desses processos chamará fork()
mais uma vez e dessa forma teremos quatro processos.
Por último, esses quatro processos chamarão fork()
, cada um gerando um novo processo e, portanto, após as três chamadas consecutivas, teremos ao todo oito processos.
Como nenhuma thread extra foi criada durante a execução do programa, então cada processo terá uma única thread. Ou seja, teremos oito threads no total.
Portanto, a alternativa correta é a E.
Mais questões
Se você deseja mais questões resolvidas do POSCOMP 2019, acesse a tag Questões do POSCOMP 2019.
Agora, se você procura questões, gabaritos e caderno de questões de outras edições, então acesse a página POSCOMP.
Resolverei as questões conforme o tempo permitir e de acordo com os meus conhecimentos. Como eu não sei resolver todas as questões, recomendo que você consulte também o gabarito oficial do exame.
Referências
- [1] GeeksforGeeks. fork() in C. Acesso em 29 de março de 2020.
- [2] Blog Programação Progressiva. A chamada de sistema fork() - Como criar e Gerenciar Processos. Acesso em 29 de março de 2020.
- [3] Wikpédia. Fork (system call). Acesso em 29 de março de 2020.
Nenhum comentário:
Postar um comentário