1 2#include <pthread.h> 3#include <stdio.h> 4#include <stdlib.h> 5 6/* Simple test program, has a race. Parent and child both modify x 7 with no locking. */ 8 9int x = 0; 10 11void* child_fn ( void* arg ) 12{ 13 /* Unprotected relative to parent */ 14 x++; 15 return NULL; 16} 17 18int main ( void ) 19{ 20 const struct timespec delay = { 0, 100 * 1000 * 1000 }; 21 pthread_t child; 22 if (pthread_create(&child, NULL, child_fn, NULL)) { 23 perror("pthread_create"); 24 exit(1); 25 } 26 nanosleep(&delay, 0); 27 /* Unprotected relative to child */ 28 x++; 29 30 if (pthread_join(child, NULL)) { 31 perror("pthread join"); 32 exit(1); 33 } 34 35 return 0; 36} 37