Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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 */
		}
	}
}
Ejemplo n.º 3
0
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);
    }
}