multithreading - 线程安全与异步信号安全

标签 multithreading reentrancy

在 APUP 第 12.5 节中,提到:

” 如果一个函数对于多个线程是可重入的,我们就说它是线程安全的。然而,这并没有告诉我们该函数对于信号处理程序是否是可重入的。”

我很困惑为什么一个函数是线程安全的但可能不是异步信号安全的。

有例子吗?

谢谢

最佳答案

通过使用互斥锁保护函数修改的状态,可以使函数成为线程安全的。然而,这不是异步信号安全的,因为如果您调用该函数,例如从信号处理程序中,程序可能会死锁。

具有此属性的常见函数是 malloc()。

关于multithreading - 线程安全与异步信号安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9512775/

相关文章:

c++ - 为什么 GCC 不使用 LOAD(无围栏)和 STORE+SFENCE 来实现顺序一致性?

c++ - Boost thread_group 返回空矩阵(openCV)

python - 如何在 python 中的线程之间传递异常

java - 在这个代码示例中,Java 中的重入使我们免于陷入死锁情况。如何,为什么?

multithreading - 托管语言和运行时的 future 保护

c - 维基百科关于重入的错误吗?

java - Java UDP 多线程最佳实践

c++ - 在多线程环境中使用 libcurl 会导致与 DNS 查找相关的性能非常慢

c - malloc() 是不可重入但线程安全的?

c - pthread : destroying global static mutex