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