1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* A simple race */
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h>
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <unistd.h>
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic int shared;
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void *th(void *v)
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	shared++;
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	return 0;
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main()
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pthread_t a, b;
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pthread_create(&a, NULL, th, NULL);
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	sleep(1);		/* force ordering */
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pthread_create(&b, NULL, th, NULL);
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pthread_join(a, NULL);
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pthread_join(b, NULL);
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	return 0;
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
28