Linux操作系统实验教程 费翔林主编 第二章 实验3 答案

#include
#include
#include
#include
#include
#include

pthread_mutex_t counter_clock = PTHREAD_MUTEX_INITIALIZER;
static long long total_words = 0;
void * count_words(void*);
int main()
{
    pthread_t t1, t2;
    char * file1 = "/home/simon/file1";
    char * file2 = "/home/simon/file2";


    /*let t1 and t2 wait*/
    pthread_mutex_lock(&counter_clock);
    /*use file1 and file2 as parameters, create two thread t1 and t2*/
    if(pthread_create(&t1, NULL, count_words, file1) != 0)
    {
        perror("t1 creation failed.\n");
    }
    if(pthread_create(&t2, NULL, count_words, file2) != 0)
    {
        perror("t2 creation failed.\n");
    }
    pthread_mutex_unlock(&counter_clock);
    /*print the total number of word.*/


    if(pthread_join(t2, NULL) != 0)
    {
        perror("t2 join failed.\n");
    }


    if(pthread_join(t1, NULL) != 0)
    {
        perror("t1 join failed.\n");
    }

    printf("Total words: %lld\n", total_words);
    pthread_mutex_destroy(&counter_clock);
    return 0;
}


void * count_words(void* f)
{
    char *filename = (char *)f;
    FILE * fp;
    int c, prevc = '\0';

    if((fp = fopen(filename,"r")) != NULL)
    {
        while((c=getc(fp)) != EOF)
        {
            if(!isalnum(c) && isalnum(prevc))
            {
                pthread_mutex_lock(&counter_clock);
                total_words++;
                pthread_mutex_unlock(&counter_clock);
            }
            prevc = c;
        }
        fclose(fp);
    }
    else
    {
        perror(filename);
    }

    pthread_exit(0);
    return NULL;
}

你可能感兴趣的:(Linux操作系统实验教程,费翔林主编,linux,c语言)