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