X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/92fd5281d1a1dbe3fede44e387b1632284582b79..371a188e58806f854497789025f7459d0f8d5204:/testsuite/xbt/context_usage.c diff --git a/testsuite/xbt/context_usage.c b/testsuite/xbt/context_usage.c index 3a8f22fd53..1392e23ac9 100644 --- a/testsuite/xbt/context_usage.c +++ b/testsuite/xbt/context_usage.c @@ -1,7 +1,11 @@ +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "xbt.h" #include "xbt/context.h" +#include "portable.h" /* To know whether we're using threads or context */ #include "xbt/fifo.h" -#include "stdlib.h" -#include "stdio.h" xbt_context_t cA = NULL; xbt_context_t cB = NULL; @@ -25,15 +29,16 @@ int fA(int argc, char** argv) printf("Here is fA: "); print_args(argc,argv); - printf("\tContext A: Yield\n"); - xbt_context_yield(); +/* printf("\tContext A: Yield\n"); */ +/* xbt_context_yield(); // FIXME: yielding to itself fails, no idea why */ + printf("\tContext A: Push context B\n"); xbt_fifo_push(fifo,cB); - printf("\tPush context B from context A\n"); - printf("\tContext A: Yield\n"); + printf("\tContext A: Yield\n"); xbt_context_yield(); - printf("\tContext A : bye\n"); + + printf("\tContext A: bye\n"); return 0; } @@ -44,13 +49,16 @@ int fB(int argc, char** argv) printf("Here is fB: "); print_args(argc,argv); -// printf("\tContext B: Yield\n"); -// xbt_context_yield(); + printf("\tContext B: Yield\n"); + xbt_context_yield(); + + printf("\tContext B: Push context A\n"); xbt_fifo_push(fifo,cA); - printf("\tPush context A from context B\n"); + printf("\tContext B: Yield\n"); xbt_context_yield(); - printf("\tContext B : bye\n"); + + printf("\tContext B: bye\n"); return 0; } @@ -61,45 +69,62 @@ int fC(int argc, char** argv) printf("Here is fC: "); print_args(argc,argv); - - printf("\tContext C: Yield (and exit)\n"); + printf("\tContext C: Yield\n"); xbt_context_yield(); + printf("\tContext C: bye\n"); return 0; } +#ifdef __BORLANDC__ +#pragma argsused +#endif + int main(int argc, char** argv) { xbt_context_t context = NULL; printf("XXX Test the simgrid context API\n"); +#if CONTEXT_THREADS + printf("XXX Using threads as a backend.\n"); +#else /* use SUSv2 contexts */ + printf("XXX Using SUSv2 contexts as a backend.\n"); printf(" If it fails, try another context backend.\n For example, to force the pthread backend, use:\n ./configure --with-context=pthread\n\n"); +#endif - xbt_context_init(); + xbt_init(&argc, argv); - cA = xbt_context_new(fA, NULL, NULL, NULL, NULL, 0, NULL); - cB = xbt_context_new(fB, NULL, NULL, NULL, NULL, 0, NULL); - cC = xbt_context_new(fC, NULL, NULL, NULL, NULL, 0, NULL); + cA = xbt_context_new("A",fA, NULL, NULL, NULL, NULL, 0, NULL); + cB = xbt_context_new("B",fB, NULL, NULL, NULL, NULL, 0, NULL); + cC = xbt_context_new("C",fC, NULL, NULL, NULL, NULL, 0, NULL); fifo = xbt_fifo_new(); printf("Here is context 'main'\n"); + printf("\tPush context 'A' (%p) from context 'main'\n",cA); + xbt_fifo_push(fifo,cA); xbt_context_start(cA); - printf("\tPush context 'A' from context 'main'\n");xbt_fifo_push(fifo,cA); + + printf("\tPush context 'B' (%p) from context 'main'\n",cB); + xbt_fifo_push(fifo,cB); xbt_context_start(cB); - printf("\tPush context 'B' from context 'main'\n");xbt_fifo_push(fifo,cB); - xbt_context_start(cC);xbt_fifo_push(fifo,cC); - printf("\tPush context 'C' from context 'main'\n");xbt_fifo_push(fifo,cC); + + printf("\tPush context 'C' (%p) from context 'main'\n",cC); + xbt_fifo_push(fifo,cC); + xbt_context_start(cC); while((context=xbt_fifo_shift(fifo))) { - printf("Context main: Yield\n"); + printf("Context main: schedule\n"); xbt_context_schedule(context); } + printf("\tFreeing Fifo\n"); xbt_fifo_free(fifo); - xbt_context_exit(); + printf("\tExit & cleaning living threads\n"); + xbt_exit(); cA=cB=cC=NULL; + printf("Context main: Bye\n"); return 0; }