互斥是由程序共享资源所引起的,某一个资源不允许同时多个程序访问,那么解决方法是要么访问其他空闲的同种资源,要么等待这一资源。等待这一资源就要在操作系统实现互斥:当一个进程正在使用资源的时候,其他希望使用该资源的程序必须等待,当该进程使用完并释放资源后,才允许其他进程去访问此资源,我们称这种进程之间的互相制约关系叫做互斥。
互斥的实现方法
软件方法
算法一:
int turn = 0;
P0: {
do {
while(turn == 0)
P0的临界区代码CS0;
turn = 1;
进程的其他代码codesegment1;
}
while(ture);
}
P1: {
do {
while(turn == 1)
P1的临界区代码CS1;
turn = 0;
进程的其他代码codesegment2;
}
while(true);
}
算法二:
//枚举类型
enum boolean {true, false};
boolean flag[2] = {false, false};
P0 {
do {
while flag[1];
flag[0] = true;
CS0;
flag[0] = false;
codesegment1;
}
while(true);
}
P1: {
do {
while flag[0];
flag[1] = true;
CS1;
flag[1] = false;
codesegment2;
}
while(true);
}
算法三:
enum boolean{false, true};
boolean flag[2] = {false, false};
P0 {
do {
flag[0] = true;
while flag[1];
CS0;
flag[0] = false;
codesegment1;
}
while(true);
}
P1: {
do {
flag[1] = true;
while flag[0];
CS1;
flag[1] = false;
codesegment2;
}
while(true);
}
算法四:
enum boolean{false, true};
boolean flag[2] = {false, false};
int turn;
P0 {
do {
flag[0] = true;
turn = 1;
while flag[1] && turn == 1;
CS0;
flag[0] = false;
codesegment1;
}
while(true);
}
P1: {
do {
flag[1] = true;
turn = 0;
while flag[0] && turn == 0;
CS1;
flag[1] = false;
codesegment2;
}
while(true);
}