Программирование Скачать
презентацию
<<  Языки программирования Линейное программирование  >>
Фотографий нет
Фото из презентации «Операция в программировании» к уроку информатики на тему «Программирование»

Автор: Geo. Чтобы познакомиться с фотографией в полном размере, нажмите на её эскиз. Чтобы можно было использовать все фотографии на уроке информатики, скачайте бесплатно презентацию «Операция в программировании» со всеми фотографиями в zip-архиве размером 235 КБ.

Скачать презентацию

Операция в программировании

содержание презентации «Операция в программировании»
Сл Текст Эф Сл Текст Эф
1Многопоточное программирование. Java Advanced.0 24Операция записи set Операции записи и чтения addAndGet,0
2Краткое содержание. Введение Классические задачи0 incAndGet, … getAndAdd, getAndInc, … Операция условной
многопоточного программирования Атомарные операции записи compareAndSet.
Примитивы синхронизации Решения задач многопоточного 25Решение задачи доступа к ресурсу. // Получение0
программирования Заключение. доступа к ресурсу while(!v.compareAndSet(0, 1)); //
3Введение. Часть 1.0 Действия с ресурсом // Освобождение ресурса v.set(0);
4Многопоточное программирование. Программа0 26Примитивы синхронизации. Часть 4.0
одновременно имеет несколько потоков исполнения Потоки 27Критическая секция. Только один поток может0
должны взаимодействовать (синхронизироваться) друг с выполнять действия в критической секции Именованные
другом. критические секции < name: statements >
5Пример. Умножение матриц. // Матрицы размера n на n0 28Решение задачи доступа к ресурсу. Доступ0
double[][] a, b, c; for (int i = 0; i < n; i++) { производится в критической секции resource <
for (int j = 0; j < n; j++) { c[i][j] = 0; for (int resource: // Доступ к ресурсу >
k = 0; k < n; k++) { c[i][j] += a[i][k] * b[k][j]; } 29Реализации критических секций. На основе блокировки0
} }. ? await(!lock) lock = true; ? // Вход // Критическая
6Пример. Итеративный параллелизм. // Матрицы размера0 секция lock = false; // Выход На основе атомарных
n на n double[][] a, b, c; for (int i = 0; i < n; операций while(!lock.compareAndSet(0, 1)); // Вход //
i++) { // Параллельно for (int j = 0; j < n; j++) { Критическая секция lock.set(0); // Выход.
// Параллельно c[i][j] = 0; for (int k = 0; k < n; 30Блокировка (lock, mutex). Только один поток может0
k++) { c[i][j] += a[i][k] * b[k][j]; } } }. владеть блокировкой Могут быть использованы для
7Пример. Обмен сообщениями (1). Рабочий поток0 передачи событий Операции lock получить блокировку
Worker[i] { double[] a; // a[i][*] double[][] b; // unlock отдать блокировку tryLock попробовать получить
b[*][*] double[] c; // c[i][*] receive a, b from блокировку.
coordinator; for (int j = 0; j < n; j++) { c[j] = 0; 31Решение задачи доступа к ресурсу. Доступ ограничен0
for (int k = 0; k < n; k++) { c[j] += a[k] * блокировкой lock // Получение блокировки lock.lock();
b[k][j]; } } send c to coordinator; }. // Доступ к ресурсу // Освобождение блокировки
8Пример. Обмен сообщениями (2). Управляющий поток0 lock.unlock().
coordinator(int i) { double[][] a, b, c; for (int i = 32Семафор. Хранит количество разрешений на вход Могут0
0; i < n; i++) { send a[i], b to worker[i]; } for быть использованы для передачи событий Операции acquire
(int i = 0; i < n; i++) { receive c[i] from получить разрешение release добавить разрешение
worker[i]; } }. tryAcquire попробовать получить разрешение.
9Пример. Обмен сообщениями (3). worker[i] { double[]0 33Барьер. Потоки блокируются пока все потоки не0
a; // a[i][*] double[] b; // b[*][i] double[] c; // прибудут к барьеру Одноразовый Многоразовый Операции
a[i][*] receive a, b from coordinator; for (int j = 0; arrive прибытие к барьеру.
j < n; j++) { double s = 0; for (int k = 0; k < 34Монитор. Разделяемые переменные инкапсулированы в0
n; k++) { s += a[k] * b[k]; } c[(i + j) % n] = s; send мониторе Код в мониторе исполняется не более чем одним
b to worker[(i + 1) % n]; receive b from worker[(i + n потоком Условия Операции с условиями wait ожидание
- 1) % n]; } send c to coordinator; }. условия notify сообщение об условии одному потоку
10Пример. Вычисление интеграла. Адаптивное вычисление0 notifyAll сообщение об условии всем потокам.
интеграла f(x) double integrate(double l, double r) { 35Решение классических задач параллельного0
if (abs(area(l, m) + area(m, r) - area(l, r)) > EPS) программирования. Часть 5.
{ return integrate(l, m) + integrate(m, r); } else { 36Производитель-потребитель. Решение с помощью0
return area(l, m) + area(m, r); } } double area(double разделенных блокировок Производитель empty.lock(); //
l, double r) { return (f(l) + f(r)) * (r - l) / 2; }. копирование full.unlock(); Потребитель full.lock(); //
11Пример. Рекурсивный параллелизм. Адаптивное0 копирование empty.unlock();
вычисление интеграла f(x) double integrate(double l, 37Задания-работники. Решение с помощью монитора0
double r) { double m = (l + r) / 2; double la = area(l, Задание queue.add(task); queue.notify(); task.wait();
m); double ra = aread(m, r); if (abs(la + ra - area(l, Работник while (queue.isEmpty()) queue.wait(); Task t =
r)) > EPS) { la = integrate(l, m); // Параллельно ra queue.get(); // Обработка задания t.notify();
= integrate(m, r); // Параллельно } return la + ra; }. 38Задача об обедающих философах. Решение с помощью0
12Основные операции. Создание потока Уничтожение0 асимметрии Все философы кроме одного берут сначала
потока Неделимая операция ?statements? Неделимая левую, затем правую вилку Оставшийся философ берет
операция с ожиданием условия ?await(C) statements? сначала правую, затем левую вилку.
13Пример. Поиск максимума (1). Без синхронизации int0 39Задача о читателях и писателях (1). Решение с0
max = 0; create worker[i] { if (max < a[i]) max = помощью блокировки Читатель ? if (nr++ == 0)
a[i]; } С синхронизацией int max = 0; create worker[i] busy.lock(); ? // Чтение ? if (--nr == 0)
{ ?if (max < a[i]) max = a[i];? }. busy.unlock(); ? Писатель busy.lock(); // Запись
14Пример. Поиск максимума (2). Протокол0 busy.unlock();
Проверить-Проверить-Установить int max = 0; create 40Задача о читателях и писателях (2). Решение с0
worker[i] { if (max < a[i]) { ? if (max < a[i]) помощью передачи эстафеты Особенности решения Если есть
max = a[i]; ? } }. и писатели и читатели, то вход закрывается Пока есть
15Свойства планирования. Справедливость Безусловная0 читатели – разрешать чтение Когда нет читателей –
Слабая Сильная Безопасность Живучесть. разрешить запись Когда нет ни читателей ни писателей –
16Классические задачи многопоточного0 открыть вход.
программирования. Часть 2. 41Задача о читателях и писателях (3).0
17Задача доступа к общему ресурсу. Несколько потоков0 42Задача о читателях и писателях. Передача эстафеты0
обращаются к общему ресурсу. if (nw == 0 && dr > 0) { dr--; r.unlock();
18Производитель-потребитель. Один поток производит0 // Возобновить процесс-читатель else if (nr == 0
данные, второй их потребляет Несколько потоков && nw == 0 && dw > 0) { dw--;
производят данные и несколько их потребляют Данные w.unlock(); // Возобновить процесс-писатель } else {
могут храниться в очереди. e.unlock(); // Открыть вход }.
19Задача о читателях и писателях. Читать могут много0 43Задача о читателях и писателях. Читатель e.lock();0
потоков одновременно Писать может только один поток if (nw > 0) { dr++; e.unlock(); r.lock(); } //
Читать во время записи нельзя. Доступ разрешен nr++; // Передача эстафеты // Чтение
20Задача об обедающих философах. 5 Философов, 50 e.lock(); nr--; // Передача эстафеты.
тарелок, 5 вилок Философ Думает Ест Что бы есть нужны 44Задача о читателях и писателях. Писатель e.lock();0
обе вилки. if (nw > 0 || nr > 0) { dw++; e.unlock();
21Задания-работники. Поток-клиент ждет выполнения0 w.lock(); } nw++; // Передача эстафеты // Запись
задания потоком-сервером. e.lock(); nw--; // Передача эстафеты.
22Атомарные операции. Часть 3.0 45Заключение. Часть 6.0
23Атомарная операция. Операция выполняемая как единое0 46Ссылки. Эндрюс Г. Основы многопоточного,0
целое Чтение Запись Неатомарные операции Инкремент параллельного и распределенного программирования Lea D.
Декремент. Concurrent Programming in Java.
24Виды атомарных операций. Операция чтения get0 47Вопросы.0
47 «Операция в программировании» | Операция в программировании 0
http://900igr.net/fotografii/informatika/Operatsija-v-programmirovanii/Operatsija-v-programmirovanii.html
cсылка на страницу
Урок

Информатика

126 тем
Фото
Презентация: Операция в программировании | Тема: Программирование | Урок: Информатика | Вид: Фото
900igr.net > Презентации по информатике > Программирование > Операция в программировании