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 
breakme(void)11 static void breakme(void)
12 {
13    if (shared == 1)
14       memset (ptr, 0x55, 1000);
15 }
16 
th(void * v)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 
main()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