#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
/* Simple test program, has two races. A happens-before detector can only
ever detect one of them, though. XXX: apparently not so; Drd and H 3.4 detect both. */
int unprot1 = 0, unprot2 = 0, prot = 0;
pthread_mutex_t mu = PTHREAD_MUTEX_INITIALIZER;
void* child_fn ( void* arg )
{
unprot1 ++;
pthread_mutex_lock( &mu );
prot ++;
pthread_mutex_unlock( &mu );
unprot2 ++;
return NULL;
}
int main ( void )
{
pthread_t child;
if (pthread_create(&child, NULL, child_fn, NULL)) {
perror("pthread_create");
exit(1);
}
unprot1 ++;
pthread_mutex_lock( &mu );
prot ++;
pthread_mutex_unlock( &mu );
unprot2 ++;
if (pthread_join(child, NULL)) {
perror("pthread join");
exit(1);
}
return 0;
}