Мне задавали эти вопросы в интервью (интервью C++). Я не уверен в ответах и хотел бы знать больше.
- Может ли поток создать другой поток?
- Может ли процесс создать другой процесс?
- Может ли поток создать процесс?
- Может ли процесс создать поток?
Мне задавали эти вопросы в интервью (интервью C++). Я не уверен в ответах и хотел бы знать больше.
Да, поток может создать другой поток. В UNIX это делается (на низком уровне) с помощью команды clone()
, а на высоком (er) уровне, в C-кодировании, через библиотеку pthread
.
Да, процесс может запустить другой процесс. Это происходит все время. Наиболее распространенный тип процесса -> процесс - через fork()
.
Это я не уверен. На данный момент я хотел бы отметить, что существует два основных типа потоков: потоки уровня ядра и потоки уровня пользователя. Потоки уровня ядра (в целом) связаны с основными процессами, в то время как потоки уровня пользователя порождаются этими процессами (то есть потоками уровня ядра). Есть исключения. Может быть, кто-то может дать лучший ответ на тему -> процесс.
Да. Смотрите комментарий в 3.
Любой код, который выполняется, может делать что угодно.
Тем не менее, процессы - это не код - потоки - это то, что на самом деле выполняется, а процессы - это окружающие их среды. Следовательно, (1) и (3) верны, остальные ложны.
Да для всех.
Это может помочь вам понять, что процессы на самом деле не "работают" в Windows. Темы запускаются. У каждого процесса есть хотя бы один поток. Итак, настоящие вопросы:
В Windows это делается с помощью API CreateThread или одного из его двоюродных братьев. Длинная версия будет "может ли код, работающий в контексте потока, создать другой поток?""Конечно, но так как весь код выполняется в контексте какого-то потока, нет необходимости в лишних словах. CreateThread принимает аргумент, который является адресом функции, которая становится функцией верхнего уровня для нового потока - по сути, "основного" нового потока.
Аналогично предыдущему: когда вы работаете в контексте потока, вы также работаете в контексте процесса, которому принадлежит поток. Так что, да, есть API CreateProcess, и вы можете использовать его для создания другого процесса.
Вы также будете автоматически и без дополнительных усилий создавать поток в своем новом процессе ... потому что (поскольку процессы не запускаются) процесс без потока ничего не может сделать. Этот первый поток в новом процессе начнет выполнять "основную" функцию программы - main () или WinMain () или что-то еще.