xref: /freebsd/tools/regression/tls/ttls2/ttls2.c (revision 75743a83e469a4efa6e983d1ce8a57ba718c18a3)
12546665aSDoug Rabson /* $FreeBSD$ */
22546665aSDoug Rabson 
32546665aSDoug Rabson #include <pthread.h>
4*75743a83SEnji Cooper #include <stdio.h>
5*75743a83SEnji Cooper #include <unistd.h>
62546665aSDoug Rabson 
72546665aSDoug Rabson int __thread i;
82546665aSDoug Rabson 
92546665aSDoug Rabson void *
102546665aSDoug Rabson foo1(void *arg)
112546665aSDoug Rabson {
122546665aSDoug Rabson 	printf("thread %p, &i = %p\n", pthread_self(), &i);
132546665aSDoug Rabson 	for (i = 0; i < 10; i++) {
142546665aSDoug Rabson 		printf("thread %p, i = %d\n", pthread_self(), i);
152546665aSDoug Rabson 		sleep(1);
162546665aSDoug Rabson 	}
17*75743a83SEnji Cooper 	return (NULL);
182546665aSDoug Rabson }
192546665aSDoug Rabson 
202546665aSDoug Rabson void *
212546665aSDoug Rabson foo2(void *arg)
222546665aSDoug Rabson {
232546665aSDoug Rabson 	printf("thread %p, &i = %p\n", pthread_self(), &i);
242546665aSDoug Rabson 	for (i = 10; i > 0; i--) {
252546665aSDoug Rabson 		printf("thread %p, i = %d\n", pthread_self(), i);
262546665aSDoug Rabson 		sleep(1);
272546665aSDoug Rabson 	}
28*75743a83SEnji Cooper 	return (NULL);
292546665aSDoug Rabson }
302546665aSDoug Rabson 
31*75743a83SEnji Cooper int
32*75743a83SEnji Cooper main(int argc, char** argv)
332546665aSDoug Rabson {
342546665aSDoug Rabson 	pthread_t t1, t2;
352546665aSDoug Rabson 
362546665aSDoug Rabson 	pthread_create(&t1, 0, foo1, 0);
372546665aSDoug Rabson 	pthread_create(&t2, 0, foo2, 0);
382546665aSDoug Rabson 	pthread_join(t1, 0);
392546665aSDoug Rabson 	pthread_join(t2, 0);
40*75743a83SEnji Cooper 
41*75743a83SEnji Cooper 	return (0);
422546665aSDoug Rabson }
43