可重入函数与死锁

  • 蓝蓝的天
  • LV5工程师
  • |      2016-07-02 12:11:30
  • 浏览量 471
  • 回复:2
从字面上理解,可重入就是可重复进入。在编程领域,它不仅仅意味着可以重复进入, 还要求在进入后能成功执行。这里的重复进入,是指当前进程已经处于该函数中,这时 程序会允许当前进程的某个执行流程再次进入该函数,而不会引发问题。这里的执行流程 不仅仅包括多线程,还包括信号处理,longjump等执行流程。所以,可重入函数一定是 线程安全的,而线程安全函数则不一定是可重入函数。 当函数使用锁的时候,尤其是互斥锁的时候,该函数是不可重入的,否则会造成死锁。 下面来看一个死锁的例子代码如下: 编译: 运行: 为什么会死锁呢?就是因为函数hold_mutex是不可重入的函数-----------其中使用了 pthread_mutex互斥量。当mutex_thread获得mutex时,sleep_thread就收到了信号,再次 调用就进入了hold_mutex。结果始终无法拿到mutex,信号处理函数无法返回,正常的程序 流程也无法继续,这就造成了死锁。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:2
兵临城下 2016-07-06
安静的听课。
0   回复
举报
发布
jiuzhou 2016-07-06
不错,这个很容易出错的
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子