2019-2020-1 20175314 《信息安全系统设计基础》第8周学习总结
时间:2019-11-17
本文章向大家介绍2019-2020-1 20175314 《信息安全系统设计基础》第8周学习总结,主要包括2019-2020-1 20175314 《信息安全系统设计基础》第8周学习总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
2019-2020-1 20175314 《信息安全系统设计基础》第8周学习总结
本周学习内容总结
一、线程概念
- Linux下的进程,控制着一个函数的执行代码的一个执行流。
二、线程与进程的区别
- 线程强调的是资源共享,因为与主线程共享PCB;进程强调的是独立性,因为每个独立的进程有各自独立的PCB。
- 创建一个线程的开销要比创建进程的开销要小。
- 多线程程序,只要有一个线程出现异常,其他线程都会被"诛连",导致程序异常出错。多进程程序,各进程之间独立,不会彼此影响。
三、线程控制
因为线程不属于系统调用,因此需要用到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.内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu(Windows)。
2.用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核CPU(Linux)。
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 20/20 | |
第二周 | 300/500 | 1/1 | 10/15 | |
第三周 | 200/500 | 1/1 | 10/12 | |
第四周 | 500/500 | 1/1 | 12/12 | |
第五周 | 200/500 | 1/1 | 8/12 | |
第六周 | 300/500 | 1/1 | 12/12 | |
第七周 | 300/500 | 1/1 | 12/12 | |
第八周 | 200/500 | 1/1 | 10/12 |
计划学习时间:10小时
实际学习时间:12小时
参考资料
原文地址:https://www.cnblogs.com/SANFENs/p/11861112.html
- 挑战数据结构与算法面试题——80题全解析(一)
- 关于操作失误的数据修复(r2笔记48天)
- 挑战数据结构与算法面试题——80题全解析(三)
- 巧用rowid简化sql查询(r2笔记47天)
- 算法类面试题解析——美团2016校招:棋子翻转
- 算法类面试题解析——美团2016校招:最大差值
- 用Python进行机器学习小案例
- 启用ODM极速调优IO (r2笔记66天)
- 通过addm分析io问题(r2笔记64天)
- python爬虫+R数据可视化 实例
- 梯度下降优化算法综述
- 关于oracle后台启用的schedule job(r2笔记65天)
- 数据结构和算法——二叉树
- 【专业技术】谷歌浏览器实现Javascript扩展
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法