Что означает термин «безопасное прерывание»? - PullRequest
6 голосов
/ 30 июня 2011

Я сталкиваюсь с этим термином время от времени. И теперь мне действительно нужно четкое объяснение, поскольку я хочу использовать некоторые процедуры MPI, которые говорят, что они не безопасны от прерываний.

Ответы [ 2 ]

8 голосов
/ 30 июня 2011

Я считаю, что это другая формулировка для reentrant.Если функция имеет значение reentrant , ее можно прервать в середине и вызвать снова.

Например:

void function()
{
    lock(mtx);
    /* code ... */
    unlock(mtx);
}

Эта функция может вызываться разными потокамимьютекс защитит код внутри).Но если сигнал приходит после lock(mtx) и функция вызывается снова, это deadlock .Так что это не безопасно прерывания.

2 голосов
/ 11 апреля 2013

Код, защищенный от одновременного доступа от прерывания, называется безопасным для прерывания.

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

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

...