Почему Unix поставляет сигналы таким образом?

в Unix, когда сигналы разнесены, и процесс получения работает более чем один поток, сначала поток выбирается для выполнения процедуры обработки сигнала.

Я не понимаю, почему это необходимо или даже смысл. Не нужна ли подпрограмме обработки сигнала собственный стек, набор регистров и т. д. в любом случае?

1
задан artistoex
03.03.2023 11:57 Количество просмотров материала 2835
Распечатать страницу

1 ответ

конечно, ему нужен свой стек и набор регистров. Но какой контекст потока он работает в вопросах тоже. С одной стороны, это контролирует, какая работа прерывается во время обработки сигнала.

например, предположим, что поток A удерживает рекурсивную блокировку и изменил некоторую критическую структуру на несогласованное состояние. Это нормально, потому что он не отпустит блокировку, пока не вернет эти структуры в согласованное состояние.

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

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

обычно в многопоточном коде есть один поток, единственная цель которого-поймать все внешние сигналы, отправляемые в программу. Он обрабатывает сигналы один за другим, поэтому сигнал никогда не прерывает код, который может удерживать блокировку.

3
отвечен David Schwartz 2023-03-04 19:45

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

operating-systems
process
signal
threads
unix
Вверх