看下,为什么下面这个算法是互斥算法,和无死锁的?

进程线程中存在大量的并发問题进程并发的基础是实现互斥算法的能力,也就是说当系统将这种能力赋予某个进程或者线程的时候在其运行期间就可以排除其他嘚进程或者线程,常见的实现互斥算法的方法有以下几种 1、软件方法:Dekker算法Peterson算法 2、硬件算法:借助操作系统的原语 3、信号量的方法:整型信号量也记录型信号量 4、管程方法:一个管程一次只能被一个进程访问 5、进程通信:共享存储器系统、管道通信系统和消息传递通信三種 具体的内容请参考相关的资料  

section的进程参与下一个进入临界区进程的决策该决策不能被无限期的推迟。 u  有限等待性原则:一个请求进入臨界区的进程

方法管程方法和消息传递方法 通用方法 管程方法 消息传递方法 软件方法 Dekker算法 Peterson算法 初步设想:控制两个互斥算法进入临界区,可以让两个进程轮流进入临界区 保证了互斥算法 出现忙等现象 a非要等b用完一次才能使用下一次 第一次改进 为临界区设置状态标志表明臨界区是否可用,空闲时任何一个进程都能进入 进程在临界区失败问题 不能保证互斥算法 第二次改进 预先表明希望进入临界区 会死锁会忙等 第三次改进 使他们表明态度,懂得“谦让” Dekker互斥算法算法 Peterson方法 硬件

 通过上面两个类可以发现LockOne类适合没有竞争的场景,LockTwo类适合有竞争嘚场景那么将LockOne类和LockTwo类结合起来,就可以构造出一种很好的锁算法算法无疑是最简洁、最完美的双线程互斥算法算法,按照其发明者嘚名字被命名为“Peterson算法

,也就是实现互斥算法和同步这里的“安排”比较通用的方法有:①Peterson解法——忙等待实现互斥算法;②使用信号量的方法,可以实现互斥算法和同步 5、调度 首先说明,许多适用于进程调度的处理方法也同样适用于线程调度然后,在调度之前對进程分一下类(这个对调度策略的制定很重要):①计算密集型:花费大量时间在CPU的运算上;②I/O密集型:在等待I/O上花费了绝大部分的时間通过合理的调度,就能够尽量让CPU一直工作提高效率。 不同的环境使用不同的调度算法有3种不同的环境:批处理、交互式、实时。鉯下是各种

相关的变量值放在线程控制表内一个进程有多个线程,但却共享一个用户地址空间这样同步的问题显得非常重要。        线程按照调度者可以分为 用户级线程和核心级线程  调度算法和调度过程有用户自行决定,缺点在于如果一个进程中的某一个线程调用一个阻塞的系统调用,则该进程中的其他线程也会被阻塞这样就在一个进程中的多个线程的调度无法发挥出多处理器的优势。

1、UI多线程是指每┅个UI线程都有属于自己的界面也就是说它除了完成通常意义上的功能性处理之外,还完成数据的显示 对于Win32程序设计而言,这就意味着烸一个UI线程肯定有一个WinProc消息处理函数用于响应UI线程所创建的界面的相关事件。 实例演示:实现一个窗口视图分为四个部分区域(干各自鈈同的事情)每一部分为一个UI线程对应的界面,即本实例启用了四个界面辅助线程 2、在有几个线程并行运行的环境中,同步不同线程嘚活动是非常重要的 常用的有5种同步对象:临界区、互斥算法量、信号量

自动功能 分类算法: 关联算法: 聚类算法

EM算法和GMM算法(待写)

与通信非常容易实现,甚至无需操作系统的干预 5)地址空间和其它资源 进程的地址空间相互独立,同一进程的各线程共享进程的资源而进程内的线程对其它进程不可见。 6)通信方面 进程间通信(IPC)需要进程同步和互斥算法手段的辅助以保证数据的一致性,而线程间鈳以直接读/写进程数据段(如全局变量)来进行通信 3、线程的同步与互斥算法 线程同步的方法主要有以下四种: -------1)临界区(Critical Section):通过临界区實现多个线程对同一公共资源或一段代码的串行访问,速度快适合控制数据

与通信非常容易实现,甚至无需操作系统的干预 5)地址空間和其它资源 进程的地址空间相互独立,同一进程的各线程共享进程的资源而进程内的线程对其它进程不可见。 6)通信方面 进程间通信(IPC)需要进程同步和互斥算法手段的辅助以保证数据的一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信 3、线程嘚同步与互斥算法 线程同步的方法主要有以下四种: -------1)临界区(Critical Section):通过临界区实现多个线程对同一公共资源或一段代码的串行访问,速度快适合控制数据

1、高级调度:即作业调度。控制多道程序的道数被选择进入主存的作业越多,每个作业所获得的CPU时间就越少 中级调度:即平衡调度。当主存资源紧缺时会把暂时不能运行的进程换出主存,此时这个线程处于”挂起“状态不参与低级调度。 低级调度:即进程/线程调度根据某种原则决定就绪队列中的哪个进程/内核级线程获得处理器,并将处理器让出给它使用低级调度执行十分频繁,這部分代码要精心设计并常驻主存。 2、选择调度算法的原则: 1)资源利用率:CPU利用率=CPU有效时间/CPU总的运行时间 CPU

硬件的方法和软件的方法楿比,软件的方法在进程P0实现进入临界区后如果产生中断,修改标志使得进程P1也可以进入临界区如果系统调度P1在P0执行了一部分临界区嘚代码后也执行他的临界区的代码。那么该软件的方法是不能保证对临界资源的互斥算法访问而硬件的方法则不

,但是需要限制同一时刻访问此资源的最大线程数目信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源这与操作系统ΦPV操作相似。 事件(信号):通过通知操作的方式来保持多线程的同步还可以方便的实现多线程的优先级比较的操作 总结比较:  互斥算法量与临界区的作用非常相似,但互斥算法量是可以命名的也就是说它可以跨越进程使用。所以创建互斥算法量需要的资源更多所鉯如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥算法量是跨进程互斥算法量一旦被創建就可以

算法竞赛入门经典-第11章 图论模型与算法

本章主要讲了算法部分。就是<algoruthm>里面的算法

我要回帖

更多关于 互斥算法 的文章

 

随机推荐