郝博雅

导航

2017-2018-1 20155205 实验三 实时系统

2017-2018-1 20155205 实验三 实时系统

实验步骤

  • 任务一
学习使用Linux命令wc(1)
基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
客户端传一个文本文件给服务器
服务器返加文本文件中的单词数

首先,要想作为一个合格的程序员,要先查看wc的帮助文档。

我们可以看到wc有四个参数,对两个文档测试一下,可以看到输出了字节数、字数和行数。

接下来编写一个自己的wc。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int countChar(char input[]){
    int p_input = 0;
    int count = 0;
    int word = 0;
    char ch;

    while(p_input < strlen(input)){
        ch = input[p_input];
        if(ch==' '){
            if(word){ //读取到空字符,而之前是非空字符,则说明读完了一个单词
                count++;
                word = 0;
            }
        }else{ //读取到第一个非空字符,说明是单词的开始
            word = 1;
        }
        p_input++;
    }
    return count;
}

int main()
{
    char input[256];
    int p_input = 0;
    int count = 0;
    FILE *fp = fopen("text.txt","r");

    fgets(input,256,fp);
    fclose(fp);

    count = countChar(input);
    printf("Your words count:\n%d\n",count);

    return 0;
}

再将mywc写到server中,统计字数后将结果返回给client。

  • 任务二
使用多线程实现wc服务器并使用同步互斥机制保证计数正确
对比单线程版本的性能,并分析原因

实验结果:

分析:只有单线程的话,服务器与客户端之间不能形成一对多的服务体制。在操作系统课中,我们学到多线程能有效地避免代码阻塞,并且提高程序的运行性能。

实验总结

  • 多线程的优点:

    (1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;

    (2)当前没有进行处理的任务时可以将处理器时间让给其它任务;

    (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;

    (4)可以随时停止任务;

    (5)可以分别设置各个任务的优先级以优化性能。

  • 多线程的缺点

    (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

    (2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。

    (3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。

    (4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

posted on 2017-11-19 15:12  郝博雅  阅读(195)  评论(2编辑  收藏  举报