linux 用户空间态调度

yangxingmeng 2017-12-25 11:52:55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <signal.h>
#include <ucontext.h>
#include <unistd.h>

ucontext_t t1;
ucontext_t t2;

unsigned char stack[1<<20];
int p = 0;

void sig_handler(int no)
{

swapcontext(&t2, &t1);
printf("############\n");
p = 1;
}

void work(int no)
{
int i = 0;
alarm(1);
for (;; i++)
{
if (p == 1)
{
printf("no = %d\n", no);
sleep(1);
}
// sleep(1);
}
}

int main()
{
signal(SIGALRM, sig_handler);
getcontext(&t1);
getcontext(&t2);
t2.uc_stack.ss_size = 1<<20;
t2.uc_stack.ss_sp = stack;

makecontext(&t2, (void (*)())work, 1, 2);
swapcontext(&t1, &t2);
swapcontext(&t1, &t2);
return 0;
}

用户态调度协程问题, 理论上这种方法就可以实现用户态调度问题, 但是感觉不是太好, 想问一下大家有没有更好的方法实现用户态调度, 就是当一个协程在用户态运行较长时间(纯计算), 可以在用户态强制切换到其他协程。
...全文
289 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
heronism 2017-12-26
  • 打赏
  • 举报
回复
不懂,帮顶。能否加注释说明一下改程序的执行就此,谢谢

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧