我Advanced Programming in the UNIX Environment (3rd Edition),11.5,线程终止读到这样的:如果我们在Unix中返回pthread_cleanup_push和pthread_cleanup_pop之间会发生什么?为什么?
如果我们运行在FreeBSD或Mac OS X相同的程序,我们看到 课程会发生分段违例和下降的核心。出现这种情况是因为 在这些系统中,pthread_cleanup_push作为一个 宏保存在栈上的一些背景下实施。当线程1在通话之间 返回pthread_cleanup_push和调用 pthread_cleanup_pop,堆栈覆盖,这些平台尝试 时调用清理 处理程序来使用这个(现在的损坏)上下文。在单一UNIX规范,返回而匹配的一对 之间的呼叫到pthread_cleanup_push和未定义的行为 pthread_cleanup_pop结果。在这两个函数之间返回的唯一便携式 的方法是调用pthread_exit。
所以,我想知道什么是在栈上所谓的上下文,什么是覆盖和损坏的上下文,以及为什么返回不能按预期工作?
“这个内存将被释放,并可能被下一个函数调用覆盖”,这是不正确的,但是这是否会因为分割违规而终止进程?我认为pthread_cleanup_pop将读取损坏的内存,它的行为将变得不可预测,但不会被终止。你怎么看? – cong