Algumas questões sobre threads e processos

0

Fizeram estas perguntas em entrevista (entrevista em C ++). Não tenho confiança nas respostas e gostaria de saber mais.

  1. Pode criar outro thread?
  2. O processo pode criar outro processo?
  3. O encadeamento pode criar um processo?
  4. O processo pode criar um segmento?
por shiv 02.02.2011 / 06:28

3 respostas

1

  1. Sim, um thread pode criar outro thread. No UNIX isso é feito (no nível baixo) através do comando clone() , e no nível alto (er), na codificação C, através da biblioteca pthread .

  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 há dois tipos principais de encadeamentos: encadeamentos no nível do kernel e encadeamentos no nível do usuário. Os encadeamentos de nível de kernel (em geral) estão vinculados a processos principais, enquanto encadeamentos de nível de usuário são gerados por esses processos (portanto, por encadeamentos no nível do kernel). Existem exceções Talvez alguém possa dar uma resposta melhor ao tópico - > processo.

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

por 02.02.2011 / 07:11
0

Qualquer código que seja executado pode fazer qualquer coisa.

Dito isto, os processos não são código - os threads são as coisas que são realmente executadas e os processos são os seus ambientes envolventes. Por isso, (1) e (3) são verdadeiras, o resto é falso.

    
por 02.02.2011 / 07:23
0

Sim para todos.

Pode ajudar você a entender que os processos não são "executados" no Windows. Tópicos são executados. Todo processo tem pelo menos um segmento. Então, as verdadeiras questões são:

  • a execução de código pode criar outro segmento? Sim.

No Windows, isso é feito com a API CreateThread, ou um de seus primos. A versão longa seria "pode codificar que está sendo executado no contexto de um segmento criar outro segmento?" Claro, mas como o código all é 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 "main" do novo thread.

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

Semelhante ao 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á-lo para criar outro processo.

Você também será, automaticamente e sem maiores esforços, criando um thread em seu novo processo ... porque (como 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 "main" do programa - main () ou WinMain () ou qualquer outra coisa.

    
por 16.09.2015 / 08:48