6 #include "xbt/context.h"
7 #include "portable.h" /* To know whether we're using threads or context */
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"); */
33 /* xbt_context_yield(); // FIXME: yielding to itself fails, no idea why */
35 printf("\tContext A: Push context B\n");
36 xbt_fifo_push(fifo,cB);
38 printf("\tContext A: Yield\n");
41 printf("\tContext A: bye\n");
46 int fB(int argc, char** argv);
47 int fB(int argc, char** argv)
49 printf("Here is fB: ");
50 print_args(argc,argv);
52 printf("\tContext B: Yield\n");
55 printf("\tContext B: Push context A\n");
56 xbt_fifo_push(fifo,cA);
58 printf("\tContext B: Yield\n");
61 printf("\tContext B: bye\n");
66 int fC(int argc, char** argv);
67 int fC(int argc, char** argv)
69 printf("Here is fC: ");
70 print_args(argc,argv);
72 printf("\tContext C: Yield\n");
75 printf("\tContext C: bye\n");
84 int main(int argc, char** argv)
86 xbt_context_t context = NULL;
88 printf("XXX Test the simgrid context API\n");
90 printf("XXX Using threads as a backend.\n");
91 #else /* use SUSv2 contexts */
92 printf("XXX Using SUSv2 contexts as a backend.\n");
93 printf(" If it fails, try another context backend.\n For example, to force the pthread backend, use:\n ./configure --with-context=pthread\n\n");
96 xbt_init(&argc, argv);
98 cA = xbt_context_new(fA, NULL, NULL, NULL, NULL, 0, NULL);
99 cB = xbt_context_new(fB, NULL, NULL, NULL, NULL, 0, NULL);
100 cC = xbt_context_new(fC, NULL, NULL, NULL, NULL, 0, NULL);
102 fifo = xbt_fifo_new();
104 printf("Here is context 'main'\n");
105 printf("\tPush context 'A' (%p) from context 'main'\n",cA);
106 xbt_fifo_push(fifo,cA);
107 xbt_context_start(cA);
109 printf("\tPush context 'B' (%p) from context 'main'\n",cB);
110 xbt_fifo_push(fifo,cB);
111 xbt_context_start(cB);
113 printf("\tPush context 'C' (%p) from context 'main'\n",cC);
114 xbt_fifo_push(fifo,cC);
115 xbt_context_start(cC);
117 while((context=xbt_fifo_shift(fifo))) {
118 printf("Context main: schedule\n");
119 xbt_context_schedule(context);
122 printf("\tFreeing Fifo\n");
124 printf("\tExit & cleaning living threads\n");
128 printf("Context main: Bye\n");