为什么sem_wait不能在信号处理程序中使用(特别是每个线程的SIGSEGV信号)?有人可以给我一个示例场景,它会使应用程序崩溃吗?我猜sem_wait是可重入的和线程安全的,所以这里有什么问题?为什么它不是异步安全的?
解决方法:
异步安全是一个比线程安全更严格的要求.您可以使用基元编写线程安全代码,以保护关键部分的全局数据.信号处理程序不能依赖于此.例如,您可能位于sem_wait内的关键部分内,同时执行导致段错误的操作.这会破坏sem_wait的线程安全保护.
2024-04-08 08:22:15
为什么sem_wait不能在信号处理程序中使用(特别是每个线程的SIGSEGV信号)?有人可以给我一个示例场景,它会使应用程序崩溃吗?我猜sem_wait是可重入的和线程安全的,所以这里有什么问题?为什么它不是异步安全的?
解决方法:
异步安全是一个比线程安全更严格的要求.您可以使用基元编写线程安全代码,以保护关键部分的全局数据.信号处理程序不能依赖于此.例如,您可能位于sem_wait内的关键部分内,同时执行导致段错误的操作.这会破坏sem_wait的线程安全保护.