/* All OK */ #include #include #include static pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER; static int shared = 0; static char *ptr; static void breakme(void) { if (shared == 1) memset (ptr, 0x55, 1000); } static void *th(void *v) { pthread_mutex_lock(&mx); shared++; if (shared == 1) { ptr = malloc (1008); breakme(); } if (shared == 2) { free (ptr); breakme(); } pthread_mutex_unlock(&mx); return 0; } int main() { pthread_t a, b; pthread_mutex_lock(&mx); pthread_mutex_unlock(&mx); pthread_create(&a, NULL, th, NULL); pthread_create(&b, NULL, th, NULL); pthread_join(a, NULL); pthread_join(b, NULL); return 0; }