5 #include "xbt/context.h"
10 xbt_context_t cA = NULL;
11 xbt_context_t cB = NULL;
12 xbt_context_t cC = NULL;
13 xbt_fifo_t fifo = NULL;
15 void print_args(int argc, char** argv);
16 void print_args(int argc, char** argv)
22 printf("%s ",argv[i]);
26 int fA(int argc, char** argv);
27 int fA(int argc, char** argv)
29 printf("Here is fA: ");
30 print_args(argc,argv);
32 printf("\tContext A: Yield\n");
35 xbt_fifo_push(fifo,cB);
36 printf("\tPush context B from context A\n");
38 printf("\tContext A: Yield\n");
40 printf("\tContext A : bye\n");
45 int fB(int argc, char** argv);
46 int fB(int argc, char** argv)
48 printf("Here is fB: ");
49 print_args(argc,argv);
51 // printf("\tContext B: Yield\n");
52 // xbt_context_yield();
53 xbt_fifo_push(fifo,cA);
54 printf("\tPush context A from context B\n");
55 printf("\tContext B: Yield\n");
57 printf("\tContext B : bye\n");
62 int fC(int argc, char** argv);
63 int fC(int argc, char** argv)
65 printf("Here is fC: ");
66 print_args(argc,argv);
69 printf("\tContext C: Yield (and exit)\n");
80 int main(int argc, char** argv)
82 xbt_context_t context = NULL;
84 printf("XXX Test the simgrid context API\n");
85 printf(" If it fails, try another context backend.\n For example, to force the pthread backend, use:\n ./configure --with-context=pthread\n\n");
89 cA = xbt_context_new(fA, NULL, NULL, NULL, NULL, 0, NULL);
90 cB = xbt_context_new(fB, NULL, NULL, NULL, NULL, 0, NULL);
91 cC = xbt_context_new(fC, NULL, NULL, NULL, NULL, 0, NULL);
93 fifo = xbt_fifo_new();
95 printf("Here is context 'main'\n");
96 xbt_context_start(cA);
97 printf("\tPush context 'A' from context 'main'\n");xbt_fifo_push(fifo,cA);
98 xbt_context_start(cB);
99 printf("\tPush context 'B' from context 'main'\n");xbt_fifo_push(fifo,cB);
100 xbt_context_start(cC);xbt_fifo_push(fifo,cC);
101 printf("\tPush context 'C' from context 'main'\n");xbt_fifo_push(fifo,cC);
103 while((context=xbt_fifo_shift(fifo))) {
104 printf("Context main: Yield\n");
105 xbt_context_schedule(context);