分享

线程 统计字符数

 江南_yanyu 2011-10-11
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
#include<semaphore.h>

void *thread_function(void *arg);
pthread_mutex_t work_mutex;

#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("Waiting for thread to finish...\n");
   res = pthread_join(a_thread,&thread_result);
   if(res!=0){
      perror("Thread join failed");
      exit(EXIT_FAILURE);
   }
   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);
        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);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多