Algumas perguntas sobre threads e processos

Algumas perguntas sobre threads e processos

Essas perguntas me foram feitas em uma entrevista (entrevista em C++). Não tenho certeza das respostas e gostaria de saber mais.

  1. O thread pode criar outro thread?
  2. O processo pode criar outro processo?
  3. O thread pode criar um processo?
  4. O processo pode criar um thread?

Responder1

  1. Sim, um tópico pode criar outro tópico. No UNIX isso é feito (no nível inferior) através do clone()comando, e no nível superior, na codificação C, através da pthreadbiblioteca.

  2. Sim, um processo pode iniciar outro processo. Isso acontece o tempo todo. O tipo mais comum de processo -> processo é através de fork().

  3. Isso, não tenho certeza. Neste ponto, gostaria de mencionar que existem dois tipos principais de threads: threads no nível do kernel e threads no nível do usuário. Threads de nível de kernel (em geral) estão vinculados a processos principais, enquanto threads de nível de usuário são gerados por esses processos (portanto, por threads de nível de kernel).Existem exceçõesTalvez alguém possa dar uma resposta melhor ao thread -> processo.

  4. Sim. Veja o comentário em 3.

Responder2

Qualquer código executado pode fazer qualquer coisa.

Dito isto, os processos não são códigos - threads são as coisas que realmente são executadas e os processos são seus ambientes envolventes. Portanto (1) e (3) são verdadeiros, o resto falso.

Responder3

Sim para tudo.

Pode ajudá-lo a entender que os processos não são realmente “executados” no Windows. Os threads são executados. Todo processo possui pelo menos um thread. Então, as verdadeiras questões são:

  • a execução do código pode criar outro thread? Sim.

No Windows, isso é feito com a API CreateThread ou uma de suas primas. A versão longa seria "o código em execução no contexto de um thread pode criar outro thread?" Claro, mas desdetodoso código é executado no contexto de algum thread, não há necessidade de palavreado extra. CreateThread recebe um argumento que é o endereço da função que se torna a função de nível superior para o novo thread - essencialmente o "principal" do novo thread.

  • a execução do código pode criar outro processo? Sim.

Da mesma forma que o anterior: quando você está executando no contexto de um thread, você também está executando no contexto do processo que possui o thread. Então, sim, existe uma API CreateProcess e você pode usá-la para criar outro processo.

Você também estará, automaticamente e sem mais esforço, criando um thread em seu novo processo... porque (já que os processos não são executados) um processo sem thread não pode fazer nada. Esse primeiro thread no novo processo começará a executar a função "principal" do programa - main() ou WinMain() ou qualquer outra coisa.

informação relacionada