利用 " 开 / 关中断指令 " 实现;
关中断:
关中断后即不允许当前进程被中断,也必然不会发生进程切换;
开中断:
直到当前进程访问完临界区,再执行开中断指令,才有可能别的进程使用处理机并访问临界区;
优点:
简单、高效;
缺点:
不适用于多处理机、只适用于操作系统内核程序、不适用于用户进程;
简称 TS 指令,也有地方称为 TestAndSetLock 指令,或 TSL 指令;
TSL 指令执行过程不允许中断,只能一气呵成:
bool TestAndSet ( bool *lock ){ bool old; old = *lock; *lock = true; retuen old; } while( TestAndSet( &lock ) ); 临界区代码 …… lock = false; 剩余区代码 ……
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
优点:
实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞,适用于多处理机环境;
缺点:
不满足 " 让权等待 " 原则,暂时无法进入临界区的进程会占用 CPU 并循环执行 TSL 指令,从而导致 " 忙等 ";
有的地方称为 Exchange 指令,或 简称 XCHG 指令,和 TS 指令几乎一样;
Swap 指令执行过程不允许中断,只能一气呵成:
Swap ( bool *a , bool *b ){ bool temp; temp = *a; *a = *b; *b = temp; } bool old = true; while( old == true ) Swap( &lock, &old); 临界区代码 …… lock = false; 剩余区代码 ……
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
优点:
实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞,适用于多处理机环境;
缺点:
不满足 " 让权等待 " 原则,暂时无法进入临界区的进程会占用 CPU 并循环执行 TSL 指令,从而导致 " 忙等 ";