- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
来自 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/
作为我任务的一部分,我一直在实现一个用户线程库。我不明白 makecontext 函数: makecontext(&(mainthread->threadctx),(void(*)(void))sta
我的问题与这一行有关: int f = makecontext( &threadList[ numThreads ].context 我的程序在没有赋值操作的情况下编译没有错误,但根本无法运行
我的程序包含以下行: makecontext( &threadList[ numThreads ].context, (void (*)(void)) &threadStart, 1, 5); 其中
我需要实现一个库来使用 C 语言的线程。用户应该传递线程的函数及其参数,然后我需要为其处理和创建线程。这是添加新线程的函数: int add_thread(void (*func)(int),
这个问题在这里已经有了答案: 关闭 11 年前。 我想按如下方式将变量参数传递给 makecontext 函数。 void a(...) { .... makecontext( &stack,
我正在尝试制作一个像 pthreads 这样的用户级线程库。我正在使用 makecontext()/swapcontext() 在线程之间进行切换,并在为线程创建上下文时传递 uctx_main 到上
我正在研究 C 编程中的上下文切换,并在 Internet 上找到了以下示例代码。我试图弄清楚是否只有 makecontext() 函数可以触发执行某些操作的函数。 setcontext()、getc
makecontext 的手册页声明 argc 之后的参数应该仅为 integer(int): ...the function func is called, and passed the serie
我看到了一些关于用户线程库的问题,但似乎没有一个能回答我的问题。我能够创建线程、运行它们、取消它们以及退出它们。由于某种原因我不能做的是让线程返回数据。 当我初始化我的线程库时,我将我的退出线程上下文
在another question我在移植代码时遇到了问题: unsigned long stack[] = { 1, 23, 33, 43 }; /* save all the registers
来自 makecontext() 手册... Due to limitations in the current pthread implementation, makecontext should
我对上下文切换很感兴趣。我已将示例代码复制到文件中 http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html
在 unix 环境中,makecontext()/swapcontext() 函数系列有时用于在 C 中实现协程。然而,这些函数直接操作堆栈和执行流。当从 C 切换到 C++ 时,这些低级功能通常有很
在调用makecontext之前,为什么我们需要设置堆栈大小ss_size? 我刚刚有一个针对 makecontext/swapcontext 代码段的单元测试用例,它因 SIGSEGV 而失败。发生
我已成功使用 makecontext/swapcontext 移动堆栈。但是,当我尝试将它与 pthread_mutex_lock 或 pthread_mutex_unlock 一起使用时,我总是
我无法将 C++0x lambda 函数作为第二个参数传递给 makecontext(来自 ucontext.h)。 makecontext 的签名是: void makecontext(uconte
#include #include #define _XOPEN_SOURCE 600 #include /* Tests creation. Should print "Hello Wo
我是一名优秀的程序员,十分优秀!