1 /* All OK */ 2 #include <stdlib.h> 3 #include <string.h> 4 #include <pthread.h> 5 6 static pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER; 7 8 static int shared = 0; 9 static char *ptr; 10 11 static void breakme(void) 12 { 13 if (shared == 1) 14 memset (ptr, 0x55, 1000); 15 } 16 17 static void *th(void *v) 18 { 19 pthread_mutex_lock(&mx); 20 shared++; 21 if (shared == 1) { 22 ptr = malloc (1008); 23 breakme(); 24 } 25 if (shared == 2) { 26 free (ptr); 27 breakme(); 28 } 29 pthread_mutex_unlock(&mx); 30 31 return 0; 32 } 33 34 int main() 35 { 36 pthread_t a, b; 37 38 pthread_mutex_lock(&mx); 39 pthread_mutex_unlock(&mx); 40 41 pthread_create(&a, NULL, th, NULL); 42 pthread_create(&b, NULL, th, NULL); 43 44 pthread_join(a, NULL); 45 pthread_join(b, NULL); 46 47 return 0; 48 } 49