La commutation de contexte - ucontext_t et makecontext()

Je suis l'étude de la commutation de contexte dans la programmation en C et ont trouvé l'exemple de code suivant sur l'Internet. Je suis à essayer de comprendre si seulement makecontext() fonction peut déclencher une fonction qui fait quelque chose. Les autres fonctions telles que setcontext(), getcontext(), et swapcontext() sont utilisés pour établir le contexte.

La makecontext() attache une fonction et son paramètre(s) à un contexte, la fonction de controle pour le contexte, tout le temps jusqu'à ce qu'un changement s'est engagée à elle?

  1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <ucontext.h>
4 #define MEM 64000
5 
6 ucontext_t T1, T2, Main;
7 ucontext_t a;
8 
9 int fn1()
10 {
11   printf("this is from 1\n");
12   setcontext(&Main);
13 }
14 
15 void fn2()
16 {
17   printf("this is from 2\n");
18   setcontext(&a);
19   printf("finished 1\n");
20 }
21 
22 void start()
23 {
24   getcontext(&a);
25   a.uc_link=0;
26   a.uc_stack.ss_sp=malloc(MEM);
27   a.uc_stack.ss_size=MEM;
28   a.uc_stack.ss_flags=0;
29   makecontext(&a, (void*)&fn1, 0);
30 }
31 
32 int main(int argc, char *argv[])
33 {
34   start();
35   getcontext(&Main);
36   getcontext(&T1);
37   T1.uc_link=0;
38   T1.uc_stack.ss_sp=malloc(MEM);
39   T1.uc_stack.ss_size=MEM;
40   makecontext(&T1, (void*)&fn1, 0);
41   swapcontext(&Main, &T1);
42   getcontext(&T2);
43   T2.uc_link=0;
44   T2.uc_stack.ss_sp=malloc(MEM);
45   T2.uc_stack.ss_size=MEM;
46   T2.uc_stack.ss_flags=0;
47   makecontext(&T2, (void*)&fn2, 0);
48   swapcontext(&Main, &T2);
49   printf("completed\n");
50   exit(0);
51 }
InformationsquelleAutor TonyGW | 2014-01-30