#include #include #include #include "mbox.h" mbox_t To_A, To_B; int Max_Run; void *ThreadA(void *JunkPTR) { int i, Data; printf("Thread A started\n"); for (i = 1; i <= Max_Run; i++) { thr_yield(); msg_receive(&To_A, &Data); printf("This is from thread A\n"); msg_send(&To_B, &i); } printf("Thread A ends\n"); } void *ThreadB(void *JunkPTR) { int i, Data; printf(" Thread B started\n"); for (i = 1; i <= Max_Run; i++) { thr_yield(); msg_receive(&To_B, &Data); printf(" This is from thread B\n"); msg_send(&To_A, &i); } printf("Thread B ends\n"); } void main(int argc, char *argv[]) { thread_t ID_A, ID_B; size_t Status_A, Status_B; int Data = 0; if (argc != 2) { printf("Use %s #-of-iterations\n", argv[0]); exit(0); } Max_Run = abs(atoi(argv[1])); printf("Parent started ...\n"); msg_init(&To_A); msg_init(&To_B); msg_send(&To_A, &Data); thr_create(NULL, 0, ThreadA, (void *) NULL, 0, (void *) &ID_A); thr_create(NULL, 0, ThreadB, (void *) NULL, 0, (void *) &ID_B); thr_join(ID_A, 0, (void *) &Status_A); thr_join(ID_B, 0, (void *) &Status_B); printf("Parent exits ...\n"); }