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

时间:2019-11-17 18:50:34   收藏:0   阅读:61

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

本周学习内容总结

一、线程概念

二、线程与进程的区别

三、线程控制

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

#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:函数的参数

有三种方法可以终止一个线程:
a.通过return返回,对主线程不适用。
b.一个线程可以调用pthread_cancel终止其它线程。
c.调用pthread_exit终止自己。

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

根据线程的终止情况不同,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,失败返回错误号

对于任意时间点,线程都是可分离的或者可结合的。
可结合的线程可以被其他线程收回资源或者杀死,在其他线程回收资源之前,它的资源是不会被释放的。
可分离的线程不能被其他线程回收或杀死,其资源是自动释放的。
默认情况下,线程都是可结合的。
如果一个可结合的线程运行完毕,没有被其他线程回收资源,那么它就会导致类似于僵尸进程的情况。
当有线程调用pthread_join回收其它线程时,如果其他线程没有运行结束,则调用者会阻塞,为避免这种情况可以将该线程分离出去。
分离线程需要调用:
int pthread_detach(thread_id); //一般是分离自己pthread_detach(pthread_self);
该线程运行完毕会自动释放所有的资源。

本周学习问题总结

代码托管

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 2/2 12/12
第八周 200/500 2/2 10/12

参考资料

原文:https://www.cnblogs.com/SANFENs/p/11861112.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!