/* gcc -o program program.c -lpthread */ #include #include #include #include #include #include /* POSIX threads */ void *mythread(void *); /* prototype of thread routine */ int sharedVar=1234 ; /* global variable */ int main() { pthread_t tid; pthread_create(&tid, NULL, mythread, NULL); printf("\n Main: created thread %d. sharedVar=%d \n", tid%1000, sharedVar); pthread_yield(); /* yield to another thread */ printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); printf("\n Main: sharedVar now is %d.\n", sharedVar); pthread_yield(); pthread_join(tid, NULL); exit(0); } /******************/ /* thread routine */ /******************/ void *mythread (void *arg) { int pid; /* display the value of the global variable */ printf("\n thread %lu: sharedVar now is %d.\n", pthread_self()%1000, sharedVar); sharedVar = 1111; printf("\n thread %lu: sharedVar now is %d.\n", pthread_self()%1000, sharedVar); pthread_yield(); /* yield to another thread or main */ pid = fork(); /* create a child process */ if ( pid == 0 ) /* child code begins */ { printf("\n CHILD in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); /* yield to another thread */ sharedVar = 1122; printf("\n CHILD in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); sharedVar = 1133; printf("\n CHILD in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); sharedVar = 1144; printf("\n CHILD in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); sharedVar = 1155; printf("\n CHILD in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); printf("CHILD: DONE\n"); } if ( pid > 0 ) /* PARENT CODE */ { printf("\n PARENT in thread: sharedVar= %d.\n", sharedVar); sharedVar = 5555; printf("\n PARENT in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); /* yield to another thread */ printf("\n PARENT in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); /* yield to another thread */ sharedVar = 5577; printf("\n PARENT in thread: sharedVar= %d.\n", sharedVar); pthread_yield(); /* yield to another thread */ } /* thread exit with an integer */ pthread_exit (216); }