linux 用户空间态调度
#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;
}
用户态调度协程问题, 理论上这种方法就可以实现用户态调度问题, 但是感觉不是太好, 想问一下大家有没有更好的方法实现用户态调度, 就是当一个协程在用户态运行较长时间(纯计算), 可以在用户态强制切换到其他协程。