gpt4 book ai didi

c - 为什么 makecontext 不适用于 pthreads

转载 作者:IT王子 更新时间:2023-10-29 00:26:25 24 4
gpt4 key购买 nike

来自 makecontext() 手册...

Due to limitations in the current pthread implementation, makecontext should not be used in programs which link against the pthread(3) library (whether threads are used or not).

现在我的问题是,为什么它不起作用以及有哪些替代方法。实际上,我对在某些时候在用户级线程中切换堆栈很感兴趣,但我发现当我调用 swapcontext() 时,我时不时会遇到段错误。我该怎么办?

我想实现这样的目标:

void thread_func(void * thread_args)
{
a();
b();
getcontext/makecontext/swapcontext to call c();
d();
....
}

所以在这种情况下,我想在执行函数 c() 时使用单独的堆栈。

最佳答案

Due to limitations in the current pthread implementation, makecontext should not be used in programs which link against the pthread(3) library

手册的该部分适用于 LinuxThreads,它用于向上舍入 %esp 值以查找当前线程描述符。如果您在备用堆栈上执行,那(显然)不会产生有效的线程描述符。

LinuxThreads 在过去 5 年多的时间里不再被任何 Linux 发行版使用,{get,make,swap}context 与 NPTL 线程一起工作得很好。

编辑: 实际上,我只在 NetBSD docs 中看到“由于限制” , 不在 Linux docs .

when I do swapcontext, I get segmentation faults every now and then

您有一个时不时显示为段错误的错误。您没有提供足够的信息来猜测错误可能在哪里。

关于c - 为什么 makecontext 不适用于 pthreads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8168958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com