// CS 450; Threads can have local data; they share // global data // version 2014-01-28 7:45 PM // #include // pthread_... #include #include // exit void *task(void *arg); // prototype int gv = 1; // Global variable int main(void) { // retcode = 0 if thread creation succeeded pthread_t thd; int retcode; int my_x; // Main's local variable // Create thread and have it run task // retcode = pthread_create(&thd, NULL, task, NULL); if (retcode != 0) { fprintf(stderr, "Thread creation failed with code %d!!\n", retcode ); exit(1); } // Set & print value of local & global variables // my_x = 1234; gv = 5678; printf("Main: &my_x = %-14p my_x = %d\n", &my_x, my_x ); printf("Main: &gv = %-14p gv = %d\n", &gv, gv ); // Wait for child to finish, then reprint local & global // variables (only global variable will have changed). // pthread_join(thd, NULL); printf("Main has waited:\n"); printf("Main: &my_x = %-14p my_x = %d\n", &my_x, my_x); printf("Main: &gv = %-14p gv = %d\n", &gv, gv); } // Task run by thread; this one changes its local // variable and prints its value // void *task(void *arg) { int my_x; // local variable my_x = 9012; gv = 3456; printf("Child: &my_x = %-14p my_x = %d\n", &my_x, my_x); printf("Child: &gv = %-14p gv = %d\n", &gv, gv); return NULL; } // Output: // // Main: &my_x = 0x7fff58187ac8 my_x = 1234 // Main: &gv = 0x107a79070 gv = 5678 // Child: &my_x = 0x107b2cef4 my_x = 9012 // Child: &gv = 0x107a79070 gv = 3456 // Main has waited: // Main: &my_x = 0x7fff58187ac8 my_x = 1234 // Main: &gv = 0x107a79070 gv = 3456