标签:返回 操作 函数 准备 var 上下 特殊 一个 基础
基于进程的并发编程
构造并发程序最简单的方法就是用进程。
一个构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。
基于进程的并发服务器
通常服务器会运行很长的时间,所以我们必须要包括一个 SIGCHLD 处理程序,来回收僵死 (zombie) 子进程的资源。当 SIGCHLD 处理程序执行时, SIGCHLD 信号是阻塞的,而 Unix 信号是不排队的。
父子进程必须关闭它们各自的 connfd 拷贝。父进程必须关闭它的已连接描述符,以避免存储器泄漏。直到父子进程的 connfd 都关闭了,到客户端的连接才会终止。
进程的优劣
基于 I/O 多路复用的并发编程
线程有自己的线程上下文,包括一个唯一的整数线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间
主线程:每个进程开始生命周期时都是单一线程。
对等线程:某一时刻,主线程创建的对等线程。
进度图
进度图是将n个并发线程的执行模型化为一条n维笛卡尔空间中的轨迹线,原点对应于没有任何线程完成一条指令的初始状态。
type semaphore=record
count: integer;
queue: list of process
end;
var s:semaphore;
读者—写者问题:
(1)读者优先,要求不让读者等待,除非已经把使用对象的权限赋予了一个写者。
(2)写者优先,要求一旦一个写者准备好可以写,它就会尽可能地完成它的写操作。
(3)饥饿就是一个线程无限期地阻塞,无法进展。
其他并发问题
线程安全
当且仅当被多个并发线程反复地调用时,它会一直产生正确的结果。
可重入性
显式可重入的:所有函数参数都是传值传递,没有指针,并且所有的数据引用都是本地的自动栈变量,没有引用静态或全剧变量。
隐式可重入的:调用线程小心的传递指向非共享数据的指针。
竞争
2018-2019-1 20165228 《信息安全系统设计基础》第八周学习总结
标签:返回 操作 函数 准备 var 上下 特殊 一个 基础
原文地址:https://www.cnblogs.com/cloud795/p/10018053.html