Я давно знаю, что нити имеют отдельное пространство стека, но разделяют кучу памяти.Значимость отдельного пространства стека для потоков
Но я недавно нашел код, который заставлял меня задавать вопрос именно то, что это значило.
Вот сокращенный вариант кода:
void SampleFunction()
{
CRemoteMessage rmessage;
rMessage.StartBackgroundAsync(); // Kickoff a background thread.
/* Do other long-running work here...
* but don't leave function SampleFunction
*/
rMessage.GetReply(); // Blocks if needed, but the message-background is mostly done by now.
rMessage.ProcessReply();
}
В этом коде rmessage
является локальным, стек переменной, но проводит большую часть своего времени в фоновом потоке. Это безопасно? Как именно фоновый поток может получить доступ к переменной стека этого потока?
Что значит «как»? Ваш CPU реализует чтение памяти, вот как ... –
Это безопасно. Класс использует указатель * this * для доступа к объекту в кадре стека. –