- #include"stdio.h"
- #include"unistd.h"
- #include"stdlib.h"
- #include"pthread.h"
- #include"semaphore.h"
- #include"string.h"
- void*thread_function(void*arg);
- pthread_mutex_twork_mutex;
- #defineWORK_SIZE1024
- charwork_area[WORK_SIZE];
- inttime_to_exit=0;
- intmain()
- {
- intres;
- pthread_ta_thread;
- void*thread_result;
- res=pthread_mutex_init(&work_mutex,NULL);
- if(res!=0){
- perror("Mutexinitializationfailed");
- exit(EXIT_FAILURE);
- }
- res=pthread_create(&a_thread,NULL,thread_function,NULL);
- if(res!=0){
- perror("Threadcreationfailed!\n");
- exit(EXIT_FAILURE);
- }
- pthread_mutex_lock(&work_mutex);
- printf("Inputsometext.Enter'end'tofinish\n");
- while(!time_to_exit){
- fgets(work_area,WORK_SIZE,stdin);
- pthread_mutex_unlock(&work_mutex);
- while(1){
- pthread_mutex_unlock(&work_mutex);
- if(work_area[0]!='\0'){
- pthread_mutex_unlock(&work_mutex);
- sleep(1);
- }
- else{
- break;
- }
- }
- pthread_mutex_unlock(&work_mutex);
- printf("\nWaitingforthresdtofinish...\n");
- res=pthread_join(a_thread,&thread_result);
- if(res!=0){
- perror("Threadjoinfailed!\n");
- exit(EXIT_FAILURE);
- }
- printf("Threadjoined!\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("Youinput%dchatacters\n",strlen(work_area)-1);
- work_area[0]='\0';
- pthread_mutex_lock(&work_mutex);
- sleep(1);
- pthread_mutex_lock(&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);
- }
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702535