![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
1. Инструменты, основанные на неделимых операциях центрального процессора (нужны в многопроцессорных вычислительных системах).
2. Инструменты, основанные на низкоуровневых примитивах – низкоуровневые методы синхронизации (семафоры).
3. Высокоуровневые инструменты синхронизации.
Два источника параллелизма:
1. Независимые потоки команд (различные программы).
2. Несвязанные потоки данных.
Синхронизация на основе операций блокировки памяти.
Все операции в ЦП – неделимые для процессов.
Алгоритм Деккера (для синхронизации двух процессов).
{
bool c1, c2;
int q;
c1 = c2 = 0;
q = 1;
//c1, c2 - намерение процесса войти в критический участок
parbegin
процесс 1: {
c1 = 1;
while (c2 == 1) {
if (q == 2) {
c1 = 0;
while (q == 2) { }
c1 = 1;
}
}
<критический участок>
c1 = 0;
q = 2;
<оставшаяся часть первого процесса>
}
процесс 2: {
c2 = 1;
while (c1 == 1) {
if (q == 1) {
c2 = 0;
while (q == 1) { }
c2 = 1;
}
}
<критический участок>
c2 = 0;
q = 1;
<оставшаяся часть второго процесса>
}
parend
}
Минус – активное ожидание входа в критический участок.
Метод, основанный на неделимой операции «проверить и установить» - ПИУ – TSL
ПИУ(локальная переменная, общая переменная) => лок = общ; общ = 1;
begin int общ; общ:= 0;
parbegin
П1:
begin
int лок1;
лок1:= 1;
do while (лок1 = 1)
ПиУ(лок1, общ)
end
<критический участок>
общ:= 0;
<остальное>
end
П2:
begin
int лок2;
лок2:= 1;
do while (лок2 = 1)
ПиУ(лок2, общ)
end
<критический участок>
общ:= 0;
<остальное>
end
parend
end
Минус – активное ожидание
Дата публикования: 2015-10-09; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!