当前位置: 技术问答>linux和unix
关于getcontext, makecontext, swapcontext函数使用的问题?
来源: 互联网 发布时间:2015-12-04
本文导语: 大家帮忙看看这个简单的程序,它是一个制造多线程执行的处理方法,假如我需要多次调用fun1函数,并且要求效率很高,不想每次都调用makecontext函数,把fun1函数的堆栈内容保存下来,每次需要执行fun1函数的时候只...
大家帮忙看看这个简单的程序,它是一个制造多线程执行的处理方法,假如我需要多次调用fun1函数,并且要求效率很高,不想每次都调用makecontext函数,把fun1函数的堆栈内容保存下来,每次需要执行fun1函数的时候只是简单的调用swapcontext就可以,该如何编写代码?
//main.c文件
#include
static ucontext_t ctx[3];
static void fun1 (long a0, long a1, long a2, long a3)
{
printf ("start run fun1(a0=%ld, a1=%ld, a2=%ld, a3=%ld)n", a0, a1, a2, a3);
printf ("finish fun1n");
}
int main (void)
{
char st1[8192];
char st2[8192];
printf ("making contextsnn");
getcontext (&ctx[1]);
ctx[1].uc_stack.ss_sp = st1;
ctx[1].uc_stack.ss_size = sizeof(st1);
ctx[1].uc_link = &ctx[0];
makecontext (&ctx[1], (void(*)(void))fun1, 4, 1, 2, 3, 4);
printf ("swapping contextsnn");
swapcontext (&ctx[0], &ctx[1]);
swapcontext (&ctx[0], &ctx[1]);
printf ("back at main program, test succeedednn");
return 0;
}
执行结果如下:
making contexts
swapping contexts
start run fun1(a0=1, a1=2, a2=3, a3=4)
finish fun1
start run fun1(a0=1, a1=11112011, a2=12087284, a3=11112190)
finish fun1
back at main program, test succeeded
//main.c文件
#include
static ucontext_t ctx[3];
static void fun1 (long a0, long a1, long a2, long a3)
{
printf ("start run fun1(a0=%ld, a1=%ld, a2=%ld, a3=%ld)n", a0, a1, a2, a3);
printf ("finish fun1n");
}
int main (void)
{
char st1[8192];
char st2[8192];
printf ("making contextsnn");
getcontext (&ctx[1]);
ctx[1].uc_stack.ss_sp = st1;
ctx[1].uc_stack.ss_size = sizeof(st1);
ctx[1].uc_link = &ctx[0];
makecontext (&ctx[1], (void(*)(void))fun1, 4, 1, 2, 3, 4);
printf ("swapping contextsnn");
swapcontext (&ctx[0], &ctx[1]);
swapcontext (&ctx[0], &ctx[1]);
printf ("back at main program, test succeedednn");
return 0;
}
执行结果如下:
making contexts
swapping contexts
start run fun1(a0=1, a1=2, a2=3, a3=4)
finish fun1
start run fun1(a0=1, a1=11112011, a2=12087284, a3=11112190)
finish fun1
back at main program, test succeeded
|
好像很难实现你所说的情况.
因为makecontext 要用当前的上下文(其实就是当前的栈顶)作参数,而这个在程序的执行过程中是不断变化的,所以很难一劳永逸!
因为makecontext 要用当前的上下文(其实就是当前的栈顶)作参数,而这个在程序的执行过程中是不断变化的,所以很难一劳永逸!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。