根据APUE第2e章,第12.5章:
如果一个函数相对于多个线程是可重入的,我们就说它是线程安全的。然而,这并不能告诉我们,对于信号处理程序来说,函数是否是可重入的。我们说,从异步信号处理程序重新输入的安全函数是异步信号安全。
我的问题是
Q1:
是否有“一般重入者”的概念(意思是在任何情况下都重新进入)?如果存在,一般可重入者在多线程和异步信号方面是否等于可重入者?还是还有第三个条件,在谈论一般的重入者时必须加以考虑?
Q2:
线程安全并不意味着异步信号安全,这是显而易见的。但是,异步信号安全确实意味着线程安全吗?我在谷歌上搜索了很多,人们都说是的,但是我找不到它的来源。
Q3:
如果Q1和Q2的答案都是肯定的,我想一般的可重入者就等于异步信号安全?
发布于 2013-04-12 23:22:36
Q1:异步信号安全是重入的最强概念.它需要非常谨慎地使用资源,并且很难在跨平台应用程序代码中进行管理。
Q2:异步信号安全意味着线程安全.线程安全意味着可以尝试两次调用函数,但来自不同的线程;异步信号安全更强,因为函数的两个调用可以在同一个线程中。这使得事情变得更加困难,因为您不能简单地等待函数的另一个调用来释放它的锁,信号处理程序中的第二个调用必须能够中断第一个调用,即使共享资源处于不一致的状态,然后在它退出时进行恢复。从信号处理程序中使用共享资源/状态基本上是不可能的:始终使用“自管技巧”,除非您真正了解信号处理程序是如何工作的,并且编写疯狂的代码有一些模糊的理由。
Q3:有些人可能会使用重入来表示线程安全。Unix信号处理程序是唯一需要更强功能的地方,这有点模糊,因为您不应该在那里做任何聪明的事情。
https://stackoverflow.com/questions/9837343
复制相似问题