94-可重入函数(二)

也许你很奇怪,为什么标题后面有个(二)。因为在信号的章节中,已经使用过此标题了。那为什么这一次又再讲一遍?这是因为,在异步信号处理与多线程中,可重入有一点点区别。

1. 可重入函数

到了这里,我们将可重入函数分成两类:

  • 对线程可重入
  • 对信号可重入

注意,上面两种是不同的。对于信号可重入,我们已经学习过了。

1.1 对线程可重入

如果一个函数对线程重入是安全的,则称其为线程安全函数。它的意思是说,在相同的时间点,可以被多个线程安全地调用。这种函数的特征:

  • 不包含全局变量或静态变量
  • 如果包含全局变量或静态变量,需要加互斥锁

这些内容,其实我们在前面都已经做过实验,讨论过了。

1.2 对信号可重入

如果一个函数对异步信号处理程序的重入是安全的,则称其为异步信号安全函数。它的意思是说,在相同时间点,可以在执行信号处理函数的时候,可被新的信号打断,再次进入信号处理函数。

这一种,就是在信号章节中所讲的可重入函数,当时规定,它里面不能有全局的或者是静态变量。即它具备下面的特征:

  • 不包含全局变量或静态变量

对比线程安全函数,我们可以看到异步信号安全函数多了一条规则,就是不允许出现互斥锁。如果你完成了《递归型互斥量》一文中的实验,相信不难理解,为什么信号处理函数中,不推荐使用互斥量(容易死锁),如果真的要用,只能使用递归类型的互斥量。

2. 总结

  • 线程安全函数不一定是异步信号安全的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值