next up previous contents
Next: Создание собственного стека потока. Up: Атрибуты потоков. Previous: Дисциплина планирования потока.   Contents

Размер стека в потоке.

Как правило, стеки потоков начинаются на границах страниц, и любой указанный размер округляется к следующей границе страницы. К вершине стека добавляется страница без разрешения на доступ, чтобы переполнение стека вызвало посылку сигнала SIGSEGV потоку, вызвавшему переполнение.

Если определяется стек, то поток должен создаваться с типом
PTHREAD_CREATE_JOINABLE. Этот стек не может быть освобожден, пока не произойдет выход из pthread_join() этого потока, потому что стек потока не может быть освобожден, пока поток не закончится. Единственный надежный способ закончить такой поток - вызов pthread_join().

В общем случае нет необходимости выделять пространство для стека потоков. Библиотека потоков выделяет один мегабайт виртуальной памяти для стека каждого потока без резервирования пространства выгрузки. (Библиотека использует опцию MAP_NORESERVE для mmap, чтобы выделить память).

Каждый стек потоков, созданный библиотекой потоков, имеет красную зону. Библиотека создает красную зону, добавляя к вершине стека страницу, чтобы обнаружить переполнение стека. Эта страница недействительна и вызывает ошибку защиты памяти, когда к ней обращаются. Красные зоны добавляются ко всем автоматически распределенным стекам, в независимости от того, был ли определен размер стека приложением, или используется размер по умолчанию.



2003-12-09