#include<pthread.h> #include<stdio.h> #include<string.h> // for memset function #include<unistd.h> // for sleep() function #define MAX 10 pthread_t thread[2]; pthread_mutex_t mut; int number=0,i; void *thread1(void* a){ printf("thread1: I'm thread 1\n"); for(i=0;i<MAX;i++){ printf( "thread1: number=%d\n" ,number ); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(2); } printf( "thread1: is it the main thread waiting for me to finish?\n" ); pthread_exit(NULL); } void *thread2(void* a){ printf( "thread2: I'm thread 2\n" ); for(i=0;i<MAX;i++){ printf( "thread2: number=%d\n" ,number); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(3); } printf( "thread2: is it the main thread waiting for me to finish?\n" ); pthread_exit(NULL); } void thread_create(void){ int temp; memset(&thread,0,sizeof(thread)); if( (temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0 ){ printf( "thread1 create failure!\n" ); }else{ printf( "thread1 has been create!\n" ); } if( (temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0 ){ printf( "thread2 create failure!\n" ); }else{ printf( "thread2 has been create!\n" ); } } void thread_wait(void){ if(thread[0]!=0){ pthread_join(thread[0],NULL); printf( "thread1 has been stop.\n" ); } if(thread[1]!=0){ pthread_join(thread[1],NULL); printf( "thread2 has been stop.\n" ); } } int main(){ pthread_mutex_init(&mut, NULL); printf( "I'm main thread! Creating sub-thread now.\n" ); thread_create(); printf( "I'm main thread! Waiting for sub-thread stop.\n" ); thread_wait(); return 0; }
|