当前位置:  技术问答>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

|
好像很难实现你所说的情况.
因为makecontext 要用当前的上下文(其实就是当前的栈顶)作参数,而这个在程序的执行过程中是不断变化的,所以很难一劳永逸!

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.script类abstractscriptengine的类成员方法: getcontext定义及介绍
  • java命名空间javax.script接口scriptengine的类成员方法: getcontext定义及介绍
  • java命名空间javax.xml.ws接口response<t>成员方法: getcontext定义参考
  • java命名空间java.security类accesscontroller的类成员方法: getcontext定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3