一些可以满足这些互斥条件方法: 软件方法:让希望并发的进程认为都需 要与另一个进程合作,以实施互斥 ●硬件支持:这种方法会涉及到使用专门 的机器指令。 ●语言支持:即在操作系统或程序设计上 提供某种级别的支持
⚫ 一些可以满足这些互斥条件方法: ⚫ 软件方法:让希望并发的进程认为都需 要与另一个进程合作,以实施互斥。 ⚫ 硬件支持:这种方法会涉及到使用专门 的机器指令。 ⚫ 语言支持:即在操作系统或程序设计上 提供某种级别的支持
2、互斥 ● Dekker算法: 1)第一种尝试 ●给共享的互斥资源保留一个标记为sign的 全局存储器单元,希望使用这一临界资 源的进程在进入临界区前必须首先检查 sign的内容。如果sign的值等于该进程的 进程号时,则该进程就可处于临界区, 否则必须等待。 ●忙等:其实就是死锁
2、互斥 ⚫ Dekker算法: ⚫ 1)第一种尝试 ⚫ 给共享的互斥资源保留一个标记为sign的 全局存储器单元,希望使用这一临界资 源的进程在进入临界区前必须首先检查 sign的内容。如果sign的值等于该进程的 进程号时,则该进程就可处于临界区, 否则必须等待。 ⚫ 忙等:其实就是死锁
●如第I号进程的程序代码段如下: ●●000000●● o while(sing!=);/什么都不做 ●/临界区 Sign=s;/s为等待此资源的一个进程的进程号
⚫ 如第I号进程的程序代码段如下: ⚫ ………… ⚫ While (sing !=I) ; /*什么都不做*/ ⚫ /*临界区*/ ⚫ Sign=s;/*s为等待此资源的一个进程的进程号*/ ⚫ ………………
●2)、第二种尝试 ●/*进程0 ●●●●。●● ● While(ag1)/延迟*/; ●Flag0}=-1;/赋值为真* ●/临界区 ●Flag0J=0;/赋值为假* ●●●●●
⚫ 2)、第二种尝试 ⚫ /*进程0*/ ⚫ …… ⚫ While (flag[1])/*延迟*/; ⚫ Flag[0]=-1;/*赋值为真*/ ⚫ /*临界区*/ ⚫ Flag[0]=0;/*赋值为假*/ ⚫ ……
●/进程1 ●●● While(fag|0/延迟*/; ●Flag=-1;/赋值为真* ●/临界区 ●Flag=0;/赋值为假 ●●●● ●会导致死锁
⚫ /*进程1*/ ⚫ …… ⚫ While (flag[0])/*延迟*/; ⚫ Flag[1]=-1;/*赋值为真*/ ⚫ /*临界区*/ ⚫ Flag[1]=0;/*赋值为假*/ ⚫ …… ⚫ 会导致死锁