[an error occurred while processing this directive] [an error occurred while processing this directive]
Есть алгоритмы для доступа (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Доброжелатель 17 января 2002 г. 16:42
В ответ на: вопрос по доступу двух процессоров к общей памяти отправлено yes 17 января 2002 г. 13:32

Алгоритм Деккера (1968).
int turn;
boolean flag[2 ];

proc( int i )
{
while (TRUE)
{
<вычисления>;
enter_region( i );
<критический интервал>;
leave_region( i );
}
}

void enter_region( int i )
{
try: flag[i] = TRUE;
while (flag [(i + 1) % 2])
{
if ( turn == i ) continue;
flag[ i ] = FALSE;
while ( turn != i );
goto try;
}
}

void leave_region( int i )
{
turn = ( turn +1 ) % 2;
flag[ i ] = FALSE;
}

turn = 0;
flag[ 0 ] = FALSE;
flag[ 1 ] = FALSE;
proc( 0 ) AND proc( 1 ) /* запустили 2 процесса */


--------------------------------------------------------------------------------

Алгоритм Петерсона (1981)
int turn;
int flag[ 2 ];

void enter_region( int i )
{
int other; /* номер другого процесса */

other = 1 - i;
flag[ i ] = TRUE;
turn = i;
while (turn == i && flag[ other ] == TRUE) /* пустой оператор */;
}

void leave_region( int i )
{
flag[ i ] = FALSE;
}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru