Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Инструменты синхронизации



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; Прочитано: 219 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...