non. ça va s'appeler récursivement et remplir la pile.
ce que tu veux faire ça s'appelle des threads/couroutines/tâches, faut deux piles différentes et utiliser un truc de taskswitch préemptif style je-sais-plus-le-nm-du-truc-de-ximoon
alternativement ça peut se faire assez simplement (sisi
![trioui](http://yaronet.org/107/image/emoji/trioui.gif)
https://www.unsads.com/scm/svn/squalyl/asi/systeme/P3S/test/switcher-ti68k/
user guest
pass guest
(je sais plus si c'est complet, je sais plus si ça marche, mais le principe y est. Dommage j'avais un truc encore plus simple que ça, je le retrouve plus
![sad](http://yaronet.org/107/image/emoji/sad.gif)
edit: ah le voila
#include <stdio.h> #include <setjmp.h> /* | context switch presque portable avec setjmp, longjmp | pour comprendre setjmp et longjmp voir la doc : | http://www-ensimag.imag.fr/cours/Systeme/setjmp.longjmp | */ #define K 1024 #define TAILLE_PILE 4*K int mem [TAILLE_PILE]; /* memoire pour la pile du processus 1 */ int * deb_mem; int proc_actif = 0; jmp_buf buf_processus[2]; /*----------------------------------------------------------------------------*/ void ctxsw(actif, elu) { if (setjmp(buf_processus[actif]) == 0) { proc_actif = elu; longjmp(buf_processus[elu], 1); } } /*----------------------------------------------------------------------------*/ int choix_elu() { if (proc_actif == 0) return 1; else return 0; } /*----------------------------------------------------------------------------*/ void resched() { int proc_elu; proc_elu = choix_elu(); ctxsw(proc_actif, proc_elu); } /*----------------------------------------------------------------------------*/ /* | code execute par les 2 processus | */ void code_processus(char * mess) { int i; while(1) { printf ("%s", mess); resched(); /* changement de processus */ } } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ int main() { deb_mem = mem; /* on pourrait faire un malloc a la place */ /* | ici c'est le processus 0 qui s'exécute avec la pile allouée au lancement du programme C */ if (setjmp(buf_processus[1]) == 0) { #ifdef LINUX /* | Initialisation de la pile pour le processus 1 (petit bricolage specifique pour linux/i386) */ buf_processus[1][0].__jmpbuf[JB_SP] = deb_mem + TAILLE_PILE; #else #ifdef SOLARIS /* | Initialisation de la pile pour le processus 1 | (petit bricolage specifique pour Solaris/Sparc) */ buf_processus[1][1] = (int) deb_mem + TAILLE_PILE - 16; #else #error "use -DLINUX or -DSOLARIS" #endif #endif printf ("Je suis le processus 0 et je pars dans la boucle\n"); code_processus("je pense\n"); } else { printf ("Je suis le processus 1 et je pars dans la boucle\n"); code_processus(" donc tu es\n"); } }