Я пытаюсь запустить поток, как только происходит прерывание. Однако я понял, что не могу запустить поток из обработчика прерывания (или любой функции, которая прямо или косвенно вызывается обработчиком прерывания). Итак, я решил сделать так, чтобы обработчик установил флаг. Затем отдельный поток постоянно отслеживает этот флаг, и если он установлен, он, в свою очередь, создает (и запускает) поток. Вот псевдокод:
int interrupt_flag = 0;
interrupt_handler(void)
{
interrupt_flag = 1
}
monitoring_thread(void) //this thread is started at the start of the program
{
while(1)
{
if(interrupt_flag)
{
interrupt_flag = 0;
//start the thread here
sleep(/*some amount of time*/);
}
}
}
Я не очень доволен наличием выделенного цикла while, постоянно отслеживающего флаг. Проблема в том, что это значительно снижает скорость других потоков в моей программе. По этой причине я вызываю функцию сна, чтобы увеличить скорость других потоков в моей программе.
Вопрос: есть ли способ действительно запустить поток по прерыванию, не имея выделенного цикла while? Есть ли обходной путь для запуска потока из обработчика прерывания?
Если это имеет значение, я использую библиотеку POSIX.
Спасибо,
PS. Этот вопрос несколько связан с более ранним вопросом, размещенным здесь:
Обмен данными между главным потоком и подчиненным потоком в среде с прерываниями в C