zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175307 20175308 20175319 实验三 并发程序

    2019-2020-1 20175307 20175308 20175319 实验三 并发程序

    小组成员

    20175307高士淳
    20175308杨元
    20175319江野

    实验步骤

    1

    • 实验要求
      学习使用Linux命令wc(1)
      基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
      客户端传一个文本文件给服务器
      服务器返加文本文件中的单词数
    • man命令查询:
    • wc指令
      • 语法:wc [选项] 文件…
      • 说明:统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
      • 参数:
        • -c 统计字节数
        • -l 统计行数
        • -m 统计字符数。这个标志不能与-c标志一起使用
        • -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
        • -L 打印最长行的长度
        • -help 在线帮助。
        • -version 显示版本信息。
    • 实验代码
    • 测试test1.txt,test2.txt

    2

    • 实验要求
      使用多线程实现wc服务器并使用同步互斥机制保证计数正确
      上方提交代码
      下方提交测试
      对比单线程版本的性能,并分析原因

    • 多线程之间同步机制:

      • 互斥锁:以排他的方式,防止共享资源被并发访问;互斥锁为二元变量, 状态为0-开锁、1-上锁;开锁必须由上锁的线程执行,不受其它线程干扰.
        • 操作流程:
          I. 创建互斥锁
          II. 申请锁:若可用,立刻占用;否则,阻塞等待
          III. do-something
          IV. 释放锁
          V. 销毁锁
      • 条件变量:满足某个特定条件时,可通过条件变量通知其它线程do-something;必须与互斥锁联合使用,单独无法执行.
      • 读写锁:针对多读者,少写者的情况设定
        • 若当前线程读数据,则允许其他线程读数据,但不允许写
        • 若当前线程写数据,则不允许其他线程读、写数据
    • 实验代码

      • 客户端代码不变。
      • 服务器代码增加功能
    • 运行结果截图

    • 与单线程的版本相比,多线程可以一次允许多个客户端连接,对于频繁IO操作的程序,可以有效地并发,工作效率更高,性能更好。但是由于线程需要创建和切换,采用多线程反而会降低执行速度。

    3

    • 实验要求
      交叉编译多线程版本服务器并部署到实验箱中
      PC机作客户端测试wc服务器
      提交测试截图
    • 将实验箱与电脑相连,参照实验一 开发环境的熟悉的步骤操作,确保目标机(超级终端)和宿主机(虚拟机Ubuntu)能互相ping通(实验箱IP为192.168.0.232,Ubantu的IP为192.168.0.230)
    • 修改客户端代码
    • 用交叉编译器arm-none-linux-gnuenbi-gcc编译server.c
    • 参照实验一 开发环境的熟悉,挂载共享目录,通过NFS把宿主机中的程序运行目录映射到目标机中
    • 在超级终端运行服务器armserve,在Ubantu运行客户端

  • 相关阅读:
    一文读懂数字人民币的发行原因与特性
    人工智能时代来临,我们终将何去何从?
    SQL在物联网时代还值得使用吗?
    比你更懂你的物联网时代,电商会不会出现新的模式
    什么样的才叫物联网?物联网发展趋势会比互联网更好吗?
    如何使用人工智能创建蛋白质形状的语言
    为什么智能优势是未来物联网的核心
    大数据、物联网和人工智能等技术能否带来新的模式
    函数间的参数传递
    函数间的参数传递
  • 原文地址:https://www.cnblogs.com/killer-queen/p/11881655.html
Copyright © 2011-2022 走看看