1 #include "xbt/context.h"
6 xbt_context_t cA = NULL;
7 xbt_context_t cB = NULL;
8 xbt_context_t cC = NULL;
9 xbt_fifo_t fifo = NULL;
11 void print_args(int argc, char** argv);
12 void print_args(int argc, char** argv)
18 printf("%s ",argv[i]);
22 int fA(int argc, char** argv);
23 int fA(int argc, char** argv)
25 printf("Here is fA: ");
26 print_args(argc,argv);
28 printf("\tContext A: Yield\n");
31 xbt_fifo_push(fifo,cB);
32 printf("\tPush context B from context A\n");
34 printf("\tContext A: Yield\n");
36 printf("\tContext A : bye\n");
41 int fB(int argc, char** argv);
42 int fB(int argc, char** argv)
44 printf("Here is fB: ");
45 print_args(argc,argv);
47 // printf("\tContext B: Yield\n");
48 // xbt_context_yield();
49 xbt_fifo_push(fifo,cA);
50 printf("\tPush context A from context B\n");
51 printf("\tContext B: Yield\n");
53 printf("\tContext B : bye\n");
58 int fC(int argc, char** argv);
59 int fC(int argc, char** argv)
61 printf("Here is fC: ");
62 print_args(argc,argv);
65 printf("\tContext C: Yield (and exit)\n");
72 int main(int argc, char** argv)
74 xbt_context_t context = NULL;
76 printf("XXX Test the simgrid context API\n");
77 printf(" If it fails, try another context backend.\n For example, to force the pthread backend, use:\n ./configure --with-context=pthread\n\n");
81 cA = xbt_context_new(fA, NULL, NULL, NULL, NULL, 0, NULL);
82 cB = xbt_context_new(fB, NULL, NULL, NULL, NULL, 0, NULL);
83 cC = xbt_context_new(fC, NULL, NULL, NULL, NULL, 0, NULL);
85 fifo = xbt_fifo_new();
87 printf("Here is context 'main'\n");
88 xbt_context_start(cA);
89 printf("\tPush context 'A' from context 'main'\n");xbt_fifo_push(fifo,cA);
90 xbt_context_start(cB);
91 printf("\tPush context 'B' from context 'main'\n");xbt_fifo_push(fifo,cB);
92 xbt_context_start(cC);xbt_fifo_push(fifo,cC);
93 printf("\tPush context 'C' from context 'main'\n");xbt_fifo_push(fifo,cC);
95 while((context=xbt_fifo_shift(fifo))) {
96 printf("Context main: Yield\n");
97 xbt_context_schedule(context);