首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程安全与异步信号安全的区别

线程安全与异步信号安全的区别
EN

Stack Overflow用户
提问于 2012-03-23 10:10:14
回答 1查看 5.3K关注 0票数 14

根据APUE第2e章,第12.5章:

如果一个函数相对于多个线程是可重入的,我们就说它是线程安全的。然而,这并不能告诉我们,对于信号处理程序来说,函数是否是可重入的。我们说,从异步信号处理程序重新输入的安全函数是异步信号安全。

我的问题是

Q1:

是否有“一般重入者”的概念(意思是在任何情况下都重新进入)?如果存在,一般可重入者在多线程和异步信号方面是否等于可重入者?还是还有第三个条件,在谈论一般的重入者时必须加以考虑?

Q2:

线程安全并不意味着异步信号安全,这是显而易见的。但是,异步信号安全确实意味着线程安全吗?我在谷歌上搜索了很多,人们都说是的,但是我找不到它的来源。

Q3:

如果Q1和Q2的答案都是肯定的,我想一般的可重入者就等于异步信号安全?

EN

回答 1

Stack Overflow用户

发布于 2013-04-12 23:22:36

Q1:异步信号安全是重入的最强概念.它需要非常谨慎地使用资源,并且很难在跨平台应用程序代码中进行管理。

Q2:异步信号安全意味着线程安全.线程安全意味着可以尝试两次调用函数,但来自不同的线程;异步信号安全更强,因为函数的两个调用可以在同一个线程中。这使得事情变得更加困难,因为您不能简单地等待函数的另一个调用来释放它的锁,信号处理程序中的第二个调用必须能够中断第一个调用,即使共享资源处于不一致的状态,然后在它退出时进行恢复。从信号处理程序中使用共享资源/状态基本上是不可能的:始终使用“自管技巧”,除非您真正了解信号处理程序是如何工作的,并且编写疯狂的代码有一些模糊的理由。

Q3:有些人可能会使用重入来表示线程安全。Unix信号处理程序是唯一需要更强功能的地方,这有点模糊,因为您不应该在那里做任何聪明的事情。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9837343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档