2014/03/03

来源:互联网 发布:2016网络流行名字大全 编辑:程序博客网 时间:2024/04/29 17:58

今天看了并发性:互斥与同步,讲到了进程(线程)间相互作用,在一个计算机系统中存在着多个进程(线程)在运行过程中,不可避免的会互相发生作用,因为它们都要竞争或共享一个计算机系统中的资源 互斥与同步就像矛与盾的问题,各自运行又相互依赖。

 临界区:一段代码,在这段代码中进程将访问共享资源,一次只允许一个进程访问 死锁:两个或两个以上的进程,因其中的每个进程都在等待其它的进程完成某件事情而无法继续执行的情况 互斥:当一个进程进入临界区访问共享资源时,其它进程不得进入临界区 

饥饿:指一个进程可以执行但因为调度器无限期的忽视而得不到执行 不论死锁或饥饿,都会使进程无法顺利执行

为避免此类事情的发生需要有解决办法,一为竞争各方平等协商,二为管理者协调。

第一类方式分软件和硬件方法,前者通过软件计算来安排进程进出临界区,不适用于数目较多的进程间互斥,后者则较前者有进步,通过TS和Swap两种指令,判断决定何时进入第二类方式中的一种是信号量,信号量只能通过初始化和P,V原语来访问,不受进程调度和执行的打断。信号量初值 s 一般为1,第一个执行semwait的进程可立即进入临界区,让后把s置为0,接着若有任何进程试图进入临界区都会被阻塞,并使s的值-1,可有任意数目的进程,每个不成功的尝试都会使s-1,当最初进入临界区的进程离开时s+1一个被阻塞的进程进入就绪区,在下次调用时进入临界区。由于信号量的P,V语句分布可能遍布整个程序中,难以看出整体效果。管程是一个程序语言设计结构,提供了信号量的所有能力,且更易于控制更加灵活,在任一时刻管程中只能有一个活跃进程,在一个进程进入管程时会检查管程中是否还有活跃进程,若有则调用进程将被挂起,直至另一进程离开将其唤醒。

 管程的应用避免进程出现死锁或者饥饿的情况,使得程序可以正常稳定快速的运行 再往后看就要结合Java综合起来看和理解,现在这样看只看到了一个片面,只了解有什么用,至于怎么用,如何用完全不明白!

0 0