Состояние виртуальной памяти потока

Как мы все знаем, в случае нескольких потоков каждый поток поддерживает свой отдельный стек и состояние регистра.

они также поддерживают отдельное состояние виртуальной памяти или его можно использовать совместно?

Я не думаю, что должны быть проблемы с разделением состояния виртуальной памяти между процессами.

ИЗМЕНИТЬ:

Если нить не поддерживает состояние, то почему не использовать третий вариант вопроса 1 по ссылке ( http://www.geeksforgeeks.org/archives/19913 ) не соответствует действительности?


person Amol Sharma    schedule 26.06.2012    source источник
comment
Что вы подразумеваете под состоянием виртуальной памяти?   -  person Alok Save    schedule 26.06.2012
comment
под состоянием виртуальной памяти я подразумеваю адреса в виртуальной памяти, которые выделены или свободны.   -  person Amol Sharma    schedule 26.06.2012


Ответы (3)


У каждого процесса есть собственное адресное пространство, то есть диапазон виртуальных адресов, к которым процесс может получить доступ. Каждый процесс может иметь несколько потоков. Итак, да, все потоки в процессе используют одно и то же адресное пространство. Обратите внимание, что это основная причина того, что переменные могут совместно использоваться несколькими потоками одного и того же процесса без какого-либо специального механизма.
С другой стороны, нельзя совместно использовать переменные в двух отдельных процессах без использования специальных механизмов, таких как Взаимодействие между процессами, поскольку у каждого процесса есть собственное адресное пространство.

person Alok Save    schedule 26.06.2012

Правильно, два потока могут совместно использовать одно и то же пространство виртуальной памяти. По сути, это (очень поверхностно) определение потоков, поскольку они связаны с процессами.

person Dougvj    schedule 26.06.2012

Они неизменно делят память. И это может вызвать и вызывает много проблем.

(Для начала проверьте тег «многопоточность».) Но многопоточность позволяет вам прослушивать множество различных входных данных, и они позволяют вам заставить все эти ядра процессора зарабатывать себе на жизнь.

person RalphChapin    schedule 26.06.2012
comment
Проблемы… и возможности ‹g› Обмен огромными буферами данных между потоками в очередях производитель-потребитель является тривиальной задачей постановки в очередь их адреса (или экземпляра класса, если объектно-ориентированный). Исходный поток, как только он отправил адрес/ссылку, может немедленно выделить/malloc/new/depool еще один для того же *объекта и начать работу над ним (если вы не используете ссылки C++ вместо указателей и тем самым предотвращаете такие простые пересесть :). - person Martin James; 27.06.2012