• 2018-2019-1 20165202 《信息安全系统设计基础》第八周学习总结


    本周学习内容

    一、线程概念

    线程就是是程序的一个控制流程,从代码的角度来看,它控制着一个函数的执行;

    说复杂点,在linux下,它就是一个进程(仅限linux),因为在linux下对于线程并没有特别的数据结构去描述它。

    简而言之,线程是代码的一个执行流。

    二、线程与进程的区别

    线程与进程的区别,总结一下有以下区别:

    • 1.线程强调的是资源共享,因为与主线程共享PCB;进程强调的是独立性,因为每个独立的进程有各自独立的PCB。

    • 2.也正因为如此,创建一个线程的开销要比创建进程的开销要小。

    • 3.多线程程序,只要有一个线程出现异常,其他线程都会被"诛连",导致程序异常出错。多进程程序,各进程之间独立,不会彼此影响。

    三、线程控制

    因为线程不属于系统调用,因此需要用到pthread.h库。

    1.创建线程

    #include <pthread.h>
    int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
    //thread:线程id,返回型参数
    //attr:线程属性
    //start_routine:所要执行的的函数(返回值void*,参数为void*)
    //arg:函数的参数
    
    

    2.终止线程

    有三种方法可以终止一个线程:

    • a.通过return返回,对主线程不适用。

    • b.一个线程可以调用pthread_cancel终止其它线程。

    • c.调用pthread_exit终止自己。

    void pthread_exit (void*retval);
    //retval:返回值,可以返回给pthread_join函数
    
    

    3.线程等待

    根据线程的终止情况不同,pthread_join有以下三种情况:

    • a.如果线程通过return返回,则retval中存放线程的返回值。

    • b.如果线程被异常终止,则retval中存放的是PTHREAD_CANCELED。

    • c.如果线程通过pthread_exit终止,则retval中存放的是pthread_exit的参数。

    int pthread_join(pthread_t pthread,void **retval);
    //pthread:需要等待的线程id
    //retval:带回的参数
    //成功返回0,失败返回错误号
    
    

    4.线程的分离与结合

    对于任意时间点,线程都是可分离的或者可结合的。

    可结合的线程可以被其他线程收回资源或者杀死,在其他线程回收资源之前,它的资源是不会被释放的。

    可分离的线程不能被其他线程回收或杀死,其资源是自动释放的。

    默认情况下,线程都是可结合的。

    如果一个可结合的线程运行完毕,没有被其他线程回收资源,那么它就会导致类似于僵尸进程的情况。

    当有线程调用pthread_join回收其它线程时,如果其他线程没有运行结束,则调用者会阻塞,为了避免这种情况,我们可以将该线程分离出去。

    分离线程需要调用:

    int pthread_detach(thread_id);    //一般是分离自己pthread_detach(pthread_self);
    

    这样的话,就不必主线程去回收其资源,该线程运行完毕,会自动释放所有的资源。


    本周学习问题总结

    问题1:

    操作系统的问题:用户级线程和内核级线程的区别联系?

    解决方案1:

    1.内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。

    2.用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的。


    课堂测试补交

    2017-2018-1 20155313 《信息安全系统设计基础》第八周课堂测试


    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 20篇 400小时
    第一周 100/100 1/1 5/5
    第二周 100/200 2/3 5/10
    第三周 100/300 2/5 5/15
    第四周 100/400 1/6 5/20
    第六周 100/500 1/7 5/25
    第七周 100/600 1/8 5/30
    第八周 800/1400 3/11 10/40

    参考资料

    操作系统相关——操作系统线程基础知识

  • 相关阅读:
    Filter and Listener
    Cookie Session
    怎样快速将一台电脑虚拟机导入另外一台电脑
    网页下载文件服务端代码
    图片验证码生成代码
    Request实战
    Response
    设置页眉页脚的距离
    页眉页脚的设置
    节的设置
  • 原文地址:https://www.cnblogs.com/jhs888/p/10016732.html
Copyright © 2020-2023  润新知