#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<pthread.h> #include<semaphore.h> void *thread_function(void *arg); pthread_mutex_t work_mutex;/*互斥量,保护工作区间及额外变量 time_to_exit*/ #define WORK_SIZE 1024 char work_area[WORK_SIZE];/*工作区*/ int time_to_exit=0; int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_mutex_init(&work_mutex,NULL);//初始化工作区间 if(res!=0){ perror("Mutex initalization failed"); exit(EXIT_FAILURE); } res = pthread_create(&a_thread,NULL,thread_function,NULL);//创建新线程 if(res!=0){ perror("Thread creation failed"); exit(EXIT_FAILURE); } /* 主线程*/ pthread_mutex_lock(&work_mutex); printf("Input some text,Enter 'end' to finish\n"); while(!time_to_exit){ fgets(work_area,WORK_SIZE,stdin); pthread_mutex_unlock(&work_mutex); while(1){ pthread_mutex_lock(&work_mutex); if(work_area[0]!='\0'){ pthread_mutex_unlock(&work_mutex); sleep(1); }else{ break; } } } pthread_mutex_unlock(&work_mutex); printf("\n Waiting for thread to finish...\n"); res = pthread_join(a_thread,&thread_result); if(res !=0 ){ perror("Thread joined\n"); pthread_mutex_destroy(&work_mutex); exit(EXIT_SUCCESS); } printf("Thread joined\n"); pthread_mutex_destroy(&work_mutex); exit(EXIT_SUCCESS); } // 新线程 void *thread_function(void *arg){ sleep(1); pthread_mutex_lock(&work_mutex); while(strncmp("end",work_area,3)!=0){ printf("You input %d characters\n",strlen(work_area)-1); work_area[0]='\0'; pthread_mutex_unlock(&work_mutex); while(work_area[0]=='\0'){ pthread_mutex_unlock(&work_mutex); sleep(1); pthread_mutex_lock(&work_mutex); } } time_to_exit=1; work_area[0]='\0'; pthread_mutex_unlock(&work_mutex); pthread_exit(0); } ----------------------------------------------------------------- 编 译运行: $gcc -Wall -lpthread -o test threadsyntest.c $./test 结 果: ![]() |
|