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