/* * thread-test.c */ #include #include #include #include #include #include int global_var = 0; void *child_func(void *data); typedef struct { int local_var; int *heap_var, *mmap_shared_var, *mmap_private_var; } vars_t; int main(int argc, char *argv[]) { vars_t vars; pthread_t child; vars.local_var = 0; vars.heap_var = (int *) malloc(sizeof(int)); *(vars.heap_var) = 0; vars.mmap_private_var = (int *) mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); *(vars.mmap_private_var) = 0; vars.mmap_shared_var = (int *) mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); *(vars.mmap_shared_var) = 0; pthread_create(&child, NULL, child_func, &vars); global_var = 12; vars.local_var = 24; *(vars.heap_var) = 36; *(vars.mmap_private_var) = 48; *(vars.mmap_shared_var) = 60; pthread_join(child, NULL); } void * child_func(void *data) { vars_t *vars = (vars_t *) data; sleep(1); printf("global_var is %d\n", global_var); printf("local_var is %d\n", vars->local_var); printf("heap_var is %d\n", *(vars->heap_var)); printf("mmap_private_var is %d\n", *(vars->mmap_private_var)); printf("mmap_shared_var is %d\n", *(vars->mmap_shared_var)); return NULL; }