12546665aSDoug Rabson /* $FreeBSD$ */ 22546665aSDoug Rabson 32546665aSDoug Rabson #include <stdio.h> 42546665aSDoug Rabson #include <pthread.h> 52546665aSDoug Rabson 62546665aSDoug Rabson int __thread i; 72546665aSDoug Rabson 82546665aSDoug Rabson void * 92546665aSDoug Rabson foo1(void *arg) 102546665aSDoug Rabson { 112546665aSDoug Rabson printf("thread %p, &i = %p\n", pthread_self(), &i); 122546665aSDoug Rabson for (i = 0; i < 10; i++) { 132546665aSDoug Rabson printf("thread %p, i = %d\n", pthread_self(), i); 142546665aSDoug Rabson sleep(1); 152546665aSDoug Rabson } 162546665aSDoug Rabson } 172546665aSDoug Rabson 182546665aSDoug Rabson void * 192546665aSDoug Rabson foo2(void *arg) 202546665aSDoug Rabson { 212546665aSDoug Rabson printf("thread %p, &i = %p\n", pthread_self(), &i); 222546665aSDoug Rabson for (i = 10; i > 0; i--) { 232546665aSDoug Rabson printf("thread %p, i = %d\n", pthread_self(), i); 242546665aSDoug Rabson sleep(1); 252546665aSDoug Rabson } 262546665aSDoug Rabson } 272546665aSDoug Rabson 282546665aSDoug Rabson int main(int argc, char** argv) 292546665aSDoug Rabson { 302546665aSDoug Rabson pthread_t t1, t2; 312546665aSDoug Rabson 322546665aSDoug Rabson pthread_create(&t1, 0, foo1, 0); 332546665aSDoug Rabson pthread_create(&t2, 0, foo2, 0); 342546665aSDoug Rabson pthread_join(t1, 0); 352546665aSDoug Rabson pthread_join(t2, 0); 362546665aSDoug Rabson } 37