可以在中断服务程序执行malloc吗?

嵌入式Linux

共 844字,需浏览 2分钟

 ·

2020-09-12 02:01

这是微信群里面的一个群友提的问题,原问题如下:

今天遇到一个面试问题  请教各位老哥  中断服务程序能否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
微信扫描二维码,关注我的公众号 
浏览 42
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报