【发布时间】:2017-04-05 14:21:21
【问题描述】:
我在Advanced Programming in the UNIX Environment (3rd Edition),11.5,Thread Termination 中读到过这个:
如果我们在 FreeBSD 或 Mac OS X 上运行相同的程序,我们会看到 程序发生分段违规并丢弃核心。有时候是这样的 因为在这些系统上,pthread_cleanup_push 被实现为 在堆栈上存储一些上下文的宏。当线程 1 返回时 在调用 pthread_cleanup_push 和调用 pthread_cleanup_pop,堆栈被覆盖,这些平台尝试 在调用清理时使用此(现在已损坏)上下文 处理程序。在单一 UNIX 规范中,在两者之间返回 一对匹配的 pthread_cleanup_push 调用和 pthread_cleanup_pop 导致未定义的行为。唯一的便携 在这两个函数之间返回的方法是调用 pthread_exit。
那么,我想知道的是什么叫栈上的上下文,什么是被覆盖和损坏的上下文,为什么返回不能按预期工作?
【问题讨论】:
标签: c multithreading unix undefined-behavior