Мне задавали эти вопросы в интервью (интервью C++). Я не уверен в ответах и хотел бы знать больше.

  1. Может ли поток создать другой поток?
  2. Может ли процесс создать другой процесс?
  3. Может ли поток создать процесс?
  4. Может ли процесс создать поток?

3 ответа3

1
  1. Да, поток может создать другой поток. В UNIX это делается (на низком уровне) с помощью команды clone() , а на высоком (er) уровне, в C-кодировании, через библиотеку pthread .

  2. Да, процесс может запустить другой процесс. Это происходит все время. Наиболее распространенный тип процесса -> процесс - через fork() .

  3. Это я не уверен. На данный момент я хотел бы отметить, что существует два основных типа потоков: потоки уровня ядра и потоки уровня пользователя. Потоки уровня ядра (в целом) связаны с основными процессами, в то время как потоки уровня пользователя порождаются этими процессами (то есть потоками уровня ядра). Есть исключения. Может быть, кто-то может дать лучший ответ на тему -> процесс.

  4. Да. Смотрите комментарий в 3.

0

Любой код, который выполняется, может делать что угодно.

Тем не менее, процессы - это не код - потоки - это то, что на самом деле выполняется, а процессы - это окружающие их среды. Следовательно, (1) и (3) верны, остальные ложны.

0

Да для всех.

Это может помочь вам понять, что процессы на самом деле не "работают" в Windows. Темы запускаются. У каждого процесса есть хотя бы один поток. Итак, настоящие вопросы:

  • Может ли выполнение кода создать другой поток? Да.

В Windows это делается с помощью API CreateThread или одного из его двоюродных братьев. Длинная версия будет "может ли код, работающий в контексте потока, создать другой поток?""Конечно, но так как весь код выполняется в контексте какого-то потока, нет необходимости в лишних словах. CreateThread принимает аргумент, который является адресом функции, которая становится функцией верхнего уровня для нового потока - по сути, "основного" нового потока.

  • Может ли выполнение кода создать другой процесс? Да.

Аналогично предыдущему: когда вы работаете в контексте потока, вы также работаете в контексте процесса, которому принадлежит поток. Так что, да, есть API CreateProcess, и вы можете использовать его для создания другого процесса.

Вы также будете автоматически и без дополнительных усилий создавать поток в своем новом процессе ... потому что (поскольку процессы не запускаются) процесс без потока ничего не может сделать. Этот первый поток в новом процессе начнет выполнять "основную" функцию программы - main () или WinMain () или что-то еще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .