int main(int argc, char* argv[]) { int m, n, k; if (argc != 2) return 0; NUM_ENTITY = atoi(argv[1]); if (!setjmp(mainctx)) { call_with_cushion(1); } while (1) { m = setjmp(mainctx); if (m != 0) k = m; if (!m) { while ( (n=(rand()%NUM_ENTITY)+1) == k); printf("n = %d\n",n); longjmp(childctx[n], 1); } } return 0; }
int main(void) { if (!setjmp(mainTask)) { call_with_cushion(); /* child never returns */ /* yield */ } /* execution resumes after this "}" after first time that child yields */ for (;;) { printf("Parent\n"); if (!setjmp(mainTask)) { longjmp(childTask, 1); /* yield - note that this is undefined under C99 */ } } }
void child(int id) { int n = 0; setjmp(childctx[id]); while (1) { if (num != id) { printf("%02d: num = %d\n", id, id); num = id; } if (id < NUM_ENTITY && n == 0) { n = 1; call_with_cushion(id+1); //child(id+1); } if (!setjmp(childctx[id])) longjmp(mainctx, id); } }