Можно ли запустить каждый поток в отдельном виртуальном адресном пространстве?
В Linux возможно ли иметь потоки процесса, работающего в разных виртуальных адресных пространствах? Если так, то как?
3 ответа
Хотя невозможно иметь потоки в одном и том же процессе с разными виртуальными адресными пространствами, все же возможно иметь локальное хранилище потоков. Вы можете быть заинтересованы в этом.
Нет. По определению потоки разделяют адресное пространство. Если вам нужны отдельные адресные пространства, вы должны использовать несколько процессов.
Это невозможно. Linux использует clone
системный вызов для реализации потоков. Требуемые флаги включают CLONE_THREAD
это означает, что новый процесс помещается в ту же группу потоков, что и вызывающий процесс, и CLONE_VM
это означает, что два процесса / потоки совместно используют виртуальную память. Поскольку ядро Linux версии 2.6.0-test6, вы не можете указать CLONE_THREAD
без указания CLONE_VM
, (См. Раздел ошибок этой ссылки.)
Однако, в зависимости от вашей точной мотивации, вы можете найти комбинацию флагов для clone
делай что хочешь.