zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175310 《信息安全系统设计基础》第九周学习总结

    2019-2020-1 20175310 《信息安全系统设计基础》第九周学习总结

    多线程

    万能函数

    void * func( void * parameter)

    typedef void* (*uf)(void * para)

    接口

    • 指明模块要做什么
    • 标识符、类型、函数等
    • *.h
    • 函数调用者

    实现

    • 指明模块如何完成接口
    • 一个接口多个实现(可能)
    • *.c
    • 函数实现者

    函数签名(Function Signature)

    • 函数名、它的参数个数,参数类型
    • 注意不包含返回值
    • 函数签名用于识别不同的函数,就像签名用于识别不同的人一样

    多线程

    单线程

    并发
    • 程序级并发—进程
    • 函数级并发—线程
      sayhello1.c
    #include <stdio.h>
    #define NUM 5
    void print_msg(char *m)
    {
    	int i;
    	for (i=0;i<NUM;i++){
    		printf("%s",m);
    		fflush(stdout);
    		sleep(1);
    	}
    }
    int main(){
    	print_msg("hello");
    	print_msg("world
    ");
    
    }
    

    多线程

    终止
    • 终止某个线程而不终止整个进程
    • 从线程函数 return
    • 调用 pthread_cancel 终止同一进程中的另一个线程
    • 调用 pthread_exit 终止自己

    pthread_join 得到的终止状态:

    • 如果 thread 线程通过 return 返回,value_ptr 所指向的单元里存放的是 thread 线程函数的返回值
    • 如果 thread 线程被别的线程调用 pthread_cancel 异常终止掉, value_ptr 所指向的单元里存放的是常数 PTHREAD_CANCELED
    • 如果 thread 线程是自己调用 pthread_exit 终止的,value_ptr 所指向 的单元存放的是传给 pthread_exit 的参数

    临界资源
    • 一次仅允许一个进程(线程)使用的资源
    • 打印机、变量、数据等
    互斥
    • 间接制约关系
    • 当一个进程进入临界区使用临界资源时,另一个进程(线程)必须等待, 当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
    同步
    • 直接制约关系
    • 为完成某种任务而建立的两个或多个进程(线程),这些进程(线程)因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
    互斥锁Mutex,Mutual Exclusive Lock
    • 获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程
    • 没有获得锁的线程只能等待而不能访问共享数据
    • “读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作
    • Mutexpthread_mutex_t 类型的变量表示


    线程与进程

    功能 进程 线程
    创建 fork pthread_create
    等待 wait/waitpid pthread_join
    终止 exit/_exit pthread_exit
    ID getpid/getppid pthread_self
    互斥 semaphore mutex/semaphore
    同步 semaphore cond var/semaphore

    代码调试中的问题

    • 遇到的问题1:运行多线程代码时报错
    对‘pthread_create’未定义的引用
    对‘pthread_join’未定义的引用
    

    • 解决方案:在编译时加一个参数-lpthread就可以了

    • 遇到的问题2:

    • 解决方案:
      ls -l test_drv_load查看系统有的组,再将脚本中的组名改为系统有的组。

    学习总结

    • 前两周因为实验太多,一直没写博客,落下了很多
    • 一些课上测试由于上课来不及做完,课后也花了时间去研究
    • 还是需要认真学习,一旦落下课程就需要花更多时间去弥补

    代码托管

    参考资料

    教材导读与每周考试重点
    《深入理解计算机系统V2》学习指导
    别出心裁的Linux系统调用学习法

  • 相关阅读:
    Struts2中Action取得表单数据的几种方法
    一次性插入多条记录快的不只一点点
    PHP规范PSR0和PSR4的理解
    mysql出现Too many connections的解决...
    浅谈Mysql 表设计规范(转)
    写单元测试的好处(转)
    TDD 与 BDD 仅仅是语言描述上的区别么?
    较好的方法命名规则(转)
    spring中InitializingBean接口使用理解(转)
    Maven:浅析依赖(dependency)关系中 scope 的含义(转)
  • 原文地址:https://www.cnblogs.com/xicyannn/p/11924406.html
Copyright © 2011-2022 走看看