Я знаю, что потоки процесса разделяют адресное пространство (все сегменты), кроме стека. Каждый поток имеет собственный стек. Я также прочитал, что в одном и том же адресном пространстве потоки могут иметь доступ к ячейке памяти, принадлежащей стеку другого потока (here и here).Имеют ли потоки доступ к стеку других потоков одного процесса?
Если приведенные выше утверждения верны, у меня есть этот вопрос: что происходит, когда ОС видит такой адрес из потока? Что делать, если потоки пишут что-то в стеке другого и коррумпируют их? почему ОС не генерирует какое-либо разрешение, отклоняющее ошибку?
Если ответ на этот вопрос зависит от операционной системы, рассмотрите Linux.
«Почему ОС не генерирует какое-либо разрешение, отклоняющее ошибку?» - почему * бы это? и кто говорит, что это обязательно * недействительно * - пока адрес, к которому обращаются, не находится в мусорной части пространства стека, я вижу нецелесообразные, но технически законные способы совместного использования адреса стека (передача этого адреса в какое-то общее состояние, которое затем доступ из других потоков). Снова * не рекомендуется *, если вы не очень хорошо знаете модель потока и модель памяти, но ... это не то же самое, что и недействительно. –
У OS уже есть абстракция для этого, один процесс не может испортить память другого. Но программисты, такие как потоки, намного эффективнее. Вы не можете иметь это в обоих направлениях. –