6 #include "xbt/context.h"
8 /* To know whether we're using threads or context */
11 # include "win32/config.h"
13 # include "gras_config.h"
18 xbt_context_t cA = NULL;
19 xbt_context_t cB = NULL;
20 xbt_context_t cC = NULL;
21 xbt_fifo_t fifo = NULL;
23 void print_args(int argc, char** argv);
24 void print_args(int argc, char** argv)
30 printf("%s ",argv[i]);
34 int fA(int argc, char** argv);
35 int fA(int argc, char** argv)
37 printf("Here is fA: ");
38 print_args(argc,argv);
40 /* printf("\tContext A: Yield\n"); */
41 /* xbt_context_yield(); // FIXME: yielding to itself fails, no idea why */
43 printf("\tContext A: Push context B\n");
44 xbt_fifo_push(fifo,cB);
46 printf("\tContext A: Yield\n");
49 printf("\tContext A: bye\n");
54 int fB(int argc, char** argv);
55 int fB(int argc, char** argv)
57 printf("Here is fB: ");
58 print_args(argc,argv);
60 /* printf("\tContext B: Yield\n"); */
61 /* xbt_context_yield(); */
63 printf("\tContext B: Push context A\n");
64 xbt_fifo_push(fifo,cA);
66 printf("\tContext B: Yield\n");
69 printf("\tContext B: bye\n");
74 int fC(int argc, char** argv);
75 int fC(int argc, char** argv)
77 printf("Here is fC: ");
78 print_args(argc,argv);
80 printf("\tContext C: Yield\n");
83 printf("\tContext C: bye\n");
92 int main(int argc, char** argv)
94 xbt_context_t context = NULL;
96 printf("XXX Test the simgrid context API\n");
98 printf("XXX Using threads as a backend.\n");
99 #else /* use SUSv2 contexts */
100 printf("XXX Using SUSv2 contexts as a backend.\n");
101 printf(" If it fails, try another context backend.\n For example, to force the pthread backend, use:\n ./configure --with-context=pthread\n\n");
104 xbt_init(&argc, argv);
106 cA = xbt_context_new(fA, NULL, NULL, NULL, NULL, 0, NULL);
107 cB = xbt_context_new(fB, NULL, NULL, NULL, NULL, 0, NULL);
108 cC = xbt_context_new(fC, NULL, NULL, NULL, NULL, 0, NULL);
110 fifo = xbt_fifo_new();
112 printf("Here is context 'main'\n");
113 printf("\tPush context 'A' (%p) from context 'main'\n",cA);
114 xbt_fifo_push(fifo,cA);
115 xbt_context_start(cA);
117 printf("\tPush context 'B' (%p) from context 'main'\n",cB);
118 xbt_fifo_push(fifo,cB);
119 xbt_context_start(cB);
121 printf("\tPush context 'C' (%p) from context 'main'\n",cC);
122 xbt_fifo_push(fifo,cC);
123 xbt_context_start(cC);
125 while((context=xbt_fifo_shift(fifo))) {
126 printf("Context main: schedule\n");
127 xbt_context_schedule(context);
130 printf("\tFreeing Fifo\n");
132 printf("\tExit & cleaning living threads\n");