可以在中断服务程序执行malloc吗?
這是微信群里面的一個群友提的問題,原問題如下:
今天遇到一個面試問題??請教各位老哥??中斷服務程序能否malloc ?為什么?我回答是?不行?因為中斷服務程序應該要盡量簡短,且執行完中斷服務程序會跳出中斷函數,要進行釋放。?但是從面試官得反應我應該是回答錯了或者沒回答到點子上。還望不吝賜教
中斷相關的文章
漫畫-Linux中斷子系統綜述
一文看盡 linux對中斷處理的前世今生
Linux中斷申請
Linux中斷子系統之Workqueue
中斷是分為上半部和下半部的,不管是上半部還是下半部,我們都需要注意一些事情
---- 中斷要盡快執行完
---- 中斷函數要可以重入
重入相關文章
你應該關心函數重入的問題
簡單說下函數可以重入的這個問題,重入的引入是因為多線程導致的,有內核的系統都是多任務系統,既然是多任務系統,如果一個函數被多個任務調用,就需要保護全局變量,只有局部變量的函數是沒有重入的問題的哈。
從內核里面截取的malloc源碼
static?void?*malloc(int?size) {void?*p;if?(size?<?0)return?NULL;if?(!malloc_ptr)malloc_ptr?=?free_mem_ptr;malloc_ptr?=?(malloc_ptr?+?3)?&?~3;?????/*?Align?*/p?=?(void?*)malloc_ptr;malloc_ptr?+=?size;if?(free_mem_end_ptr?&&?malloc_ptr?>=?free_mem_end_ptr)return?NULL;malloc_count++;return?p; }很明顯里面有全局變量,而且這個全局變量沒有加鎖保護,這種函數如果在中斷服務函數里面,如果中斷被多次觸發,那就比較出現問題了,還有一個情況,如果malloc失敗了呢?是不是要退出中斷,我們知道中斷是不能return的啊。
我的一點自己見解,歡迎大佬們評論說出自己的觀點
?推薦閱讀:
? ??專輯|Linux文章匯總
? ??專輯|程序人生
? ??專輯|C語言
嵌入式Linux
微信掃描二維碼,關注我的公眾號?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的可以在中断服务程序执行malloc吗?的全部內容,希望文章能夠幫你解決所遇到的問題。