我想作爲一箇中斷髮生時儘快啓動一個線程中的一個線程。但是,我意識到我無法從中斷處理程序(或者直接或間接被中斷處理程序調用的任何函數)內啓動線程。所以,我決定做的是讓處理程序聲明一個標誌。然後,一個單獨的線程連續監視該標誌,如果它被聲明,它將依次創建(並啓動)一個線程。這裏是一個僞代碼:起價中斷處理程序
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。這個問題具有一定的相關貼在這裏前面一個問題:
Sharing data between master thread and slave thread in interrupt driven environment in C
如果中斷處理程序搶佔當前任務,我期望它會有一些API調用它來安排一些其他任務(或回調)運行來做t他真正的工作。有沒有這樣的事情可以在你的系統中完成?那個任務可以產生線程。 – jxh
是的,如果這是一個操作系統(還有什麼會處理中斷?),那麼它應該有一種方法來喚醒等待的任務。 –
傳統的方法是使用信號量。在中斷處理程序中調用任何可能阻塞的方法(例如互斥鎖)將導致最終的災難。 –