конечно, ему нужен свой стек и набор регистров. Но какой контекст потока он работает в вопросах тоже. С одной стороны, это контролирует, какая работа прерывается во время обработки сигнала.
например, предположим, что поток A удерживает рекурсивную блокировку и изменил некоторую критическую структуру на несогласованное состояние. Это нормально, потому что он не отпустит блокировку, пока не вернет эти структуры в согласованное состояние.
теперь скажите, что сигнал прерывается поток A, и обработчик сигнала идет, чтобы получить блокировку, чтобы проверить ту критическую структуру. Он получает блокировку, потому что это поток, который уже содержит блокировку, и блокировка рекурсивна. Поскольку он только что получил блокировку, которая защищает критическую структуру, он ожидает, что сможет получить к ней доступ и найти ее в согласованном состоянии. Но, конечно, он находится в противоречивом состоянии. бум! ты просто разбился.
Так что в этом случае обработчик сигнала должен всегда идти в поток, который никогда не получит этот замок. Таким образом, когда обработчик сигналов получает блокировку, он уверен, что никакой другой код не содержит эту блокировку, и, таким образом, структура должна быть в согласованном состоянии.
обычно в многопоточном коде есть один поток, единственная цель которого-поймать все внешние сигналы, отправляемые в программу. Он обрабатывает сигналы один за другим, поэтому сигнал никогда не прерывает код, который может удерживать блокировку.