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\n");

}

多线程

终止
  • 终止某个线程而不终止整个进程
  • 从线程函数 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系统调用学习法

猜你喜欢

转载自www.cnblogs.com/xicyannn/p/11924406.html