可以在中斷服務(wù)程序執(zhí)行malloc嗎?

這是微信群里面的一個(gè)群友提的問題,原問題如下:
今天遇到一個(gè)面試問題??請(qǐng)教各位老哥??中斷服務(wù)程序能否malloc ?為什么?我回答是?不行?因?yàn)橹袛喾?wù)程序應(yīng)該要盡量簡短,且執(zhí)行完中斷服務(wù)程序會(huì)跳出中斷函數(shù),要進(jìn)行釋放。?但是從面試官得反應(yīng)我應(yīng)該是回答錯(cuò)了或者沒回答到點(diǎn)子上。還望不吝賜教
中斷相關(guān)的文章
中斷是分為上半部和下半部的,不管是上半部還是下半部,我們都需要注意一些事情
---- 中斷要盡快執(zhí)行完
---- 中斷函數(shù)要可以重入
重入相關(guān)文章
你應(yīng)該關(guān)心函數(shù)重入的問題
簡單說下函數(shù)可以重入的這個(gè)問題,重入的引入是因?yàn)槎嗑€程導(dǎo)致的,有內(nèi)核的系統(tǒng)都是多任務(wù)系統(tǒng),既然是多任務(wù)系統(tǒng),如果一個(gè)函數(shù)被多個(gè)任務(wù)調(diào)用,就需要保護(hù)全局變量,只有局部變量的函數(shù)是沒有重入的問題的哈。
從內(nèi)核里面截取的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;
}
很明顯里面有全局變量,而且這個(gè)全局變量沒有加鎖保護(hù),這種函數(shù)如果在中斷服務(wù)函數(shù)里面,如果中斷被多次觸發(fā),那就比較出現(xiàn)問題了,還有一個(gè)情況,如果malloc失敗了呢?是不是要退出中斷,我們知道中斷是不能return的啊。
我的一點(diǎn)自己見解,歡迎大佬們?cè)u(píng)論說出自己的觀點(diǎn)

