转变量或严格交替方法是在用户模式下实施的软件机制。这是一个繁忙的等待解决方案, 只能对两个进程实施。在这种方法中, 使用了一个转变量, 它实际上是一个锁。
此方法只能用于两个线程。通常, 让两个线程为Pi和Pj。他们共享一个称为转变量的变量。程序的伪代码可以如下所示。
对于线程Pi
Non - CS
while (turn ! = i);
Critical Section
turn = j;
Non - CS
对于线程Pj
Non - CS
while (turn ! = j);
Critical Section
turn = i ;
Non - CS
锁变量方法的实际问题是, 仅当锁变量为1时, 进程才进入临界区。一个以上的进程可以同时将锁变量视为1, 因此不能保证互斥。那里。
转可变方法解决了这个问题。现在, 仅当转变量的值等于线程的PID时, 线程才能进入关键部分。
转变量i或j只能有两个值。如果它的值不是i, 那么它肯定是j, 反之亦然。
通常, 在进入部分中, 线程Pi直到其值为j才进入临界部分, 或者线程Pj直到其值为i才进入临界部分。
最初, 两个进程Pi和Pj可用, 并且要执行到关键部分。
文章图片
转变量等于i, 因此Pi将有机会进入临界区。 Pi的值保持为I, 直到Pi完成关键部分。
文章图片
Pi完成其关键部分并将j赋给变量。 Pj将有机会进入关键部分。转的值一直保持j, 直到Pj完成其临界区为止。
文章图片
严格交替法分析 让我们基于四个需求来分析严格交替方法。
互斥
严格的交替方法在每种情况下都提供互斥。此线程仅适用于两个线程。对于这两个线程, 伪代码是不同的。该线程仅在看到转变量等于其线程ID时才进入, 否则不会进入, 因此无论线程如何, 都无法进入关键部分。
进展
这种机制无法保证取得进展。如果Pi不想轮流进入临界区, 则Pj会无限期地被挡住。 Pj必须等待这么长时间, 因为转变量将保持为0, 直到Pi将其分配给j。
可移植性
【转可变或严格的交替方式】该解决方案提供了可移植性。它是在用户模式下实现的纯软件机制, 不需要操作系统的任何特殊说明。
文章图片
推荐阅读
- 操作系统教程介绍
- web app响应式字体设置!rem之我见
- Java内存模型之happens-before
- Android 线程交互
- 如何在Unity中开发Leap Motion桌面版(Non-VR)APP
- app.honeycomb.Shell$HomeActivity failed to start
- 消灭选择困难APP
- test_app.sh
- android-读取MediaProvider