5.3 Взаимно изключване: хардуера поддръжка.
** Непозволяване на прекъсвания - проблеми при многопроцесорни системи
и неефективно използване на ресурси..
** Специални машинни команди. Функцията testset
не реализирана хардуерно и връща стойност за един такт на процесора, т.е.
не може да се прекъсва.
bool testset(int &i)
{ if (i == 0)
{ i = 1; return true; }
return false;
}
const int
n; /* number of processes */
int bolt;
void P(int
k)
{ while(true)
{
do nothing();
while (!testset(bolt));
<critical section>
bolt = 0;
<remainder>
}
}
void main()
{ parbegin(P(1),P(2),...,P(n));
}
Когато променливата bolt
има стойност 1, има процес в КС и функцията testset
връща
стойност false - т.е. всички
процеси, които имат интерес за КС, чакат. Когато променливата
bolt
има стойност 0, няма процес в КС, функцията testset
връща стойност false
, като стойността на bolt
става 1. Процес, който излиза от КС, променя стойността на bolt
на 0. Гарантирано е ВИ, няма опасност от МХ.