Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
34 слайда
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
141.54 kB
Просмотров:
92
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img0.jpg)
Содержание слайда: АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ
РАЗДЕЛ 3.1
СИНХРОНИЗАЦИЯ ПРОЦЕССОВ
№2 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img1.jpg)
№3 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img2.jpg)
№4 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img3.jpg)
№5 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img4.jpg)
№6 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img5.jpg)
№7 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img6.jpg)
№8 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img7.jpg)
№9 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img8.jpg)
№10 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img9.jpg)
№11 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img10.jpg)
№12 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img11.jpg)
№13 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img12.jpg)
№14 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img13.jpg)
№15 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img14.jpg)
№16 слайд![Пример для C Пример для C](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img15.jpg)
Содержание слайда: Пример для C++(1):
Пример для C++(1):
// Библиотека потоков POSIX
#include <pthread.h>
typedef pthread_mutex_t CRIT_SECTION;
....
// Функции для работы со стандартными типами
void WTF_InitCritSect(CRIT_SECTION * cs) {pthread_mutex_init(cs, NULL); }
void WTF_EnterCritSect(CRIT_SECTION * cs) {pthread_mutex_lock(cs); }
void WTF_LeaveCritSect(CRIT_SECTION * cs) {pthread_mutex_unlock(cs); }
void WTF_DestroyCritSect(CRIT_SECTION * cs) {pthread_mutex_destroy(cs); }
...
№17 слайд![void main void Пример для C](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img16.jpg)
Содержание слайда: void main (void) { Пример для C++(2):
void main (void) { Пример для C++(2):
pthread_t task1, task2, task3;
...
// Создпние потоков, которые будут бороться за ресурс
pthread_create (&task1, NULL, TaskThread, (void*) &thread1Info);
pthread_create (&task2, NULL, TaskThread, (void*) &thread2Info);
pthread_create (&task3, NULL, TaskThread, (void*) &thread3Info);
pthread_detach (task1); //независимое исполн потоков
pthread_detach (task2);
pthread_detach (task3);
… }
№18 слайд![void TaskThread void](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img17.jpg)
Содержание слайда: void * TaskThread (void* threadInfo) { Пример для C++(3):
void * TaskThread (void* threadInfo) { Пример для C++(3):
// Код, конфигурирующий работу потока согласно
// параметрам, переданным через threadInfo.
// Например, N – объём ресурса, необходимый потоку
...
// Основной цикл работы, в котором
// происходит обращение к ресурсу
while (1) { ...
PrinterMonitor::instance().acquirePages (N); // Блокирующий запрос ресурса
// Процесс что-то печатает на страницах
PrinterMonitor::instance().addPaperToTray (N); // Процесс освобождения
ресурса
... }
...}
№19 слайд![Паттерн Singleton Пример для](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img18.jpg)
Содержание слайда: // Паттерн Singleton Пример для C++(4):
// Паттерн Singleton Пример для C++(4):
const int gPagesTotal = 10; // Общий объём ресурса
class PrinterMonitor {// Монитор ресурса
int pagesLeft;
CRIT_SECTION lock; // объект для синхронизации
…
public:
static PrinterMonitor instance () {…} // Получение объекта монитора
void addPaperToTray (int N) { // Освобождение ресурса
pagesLeft += N; // Освободить N страниц
}
№20 слайд![Блокирующий захват ресурсов](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img19.jpg)
Содержание слайда: // Блокирующий захват ресурсов Пример для C++(5):
// Блокирующий захват ресурсов Пример для C++(5):
void acquirePages (int N) {
WTF_EnterCritSect (& lock);
// Ждать, пока освободится N страниц
while (pagesLeft < N) {}
// Захватить нужный объём ресурса
pagesLeft -= N;
WTF_LeaveCritSect (& lock);
}
}
№21 слайд![static class WTF Lock extends](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img20.jpg)
Содержание слайда: static class WTF_Lock extends Object {} Пример для Java(1):
static class WTF_Lock extends Object {} Пример для Java(1):
static public WTF_Lock lockObject = new WTF_Lock();
…
package chapt14;
// Класс монитора ресурсов, также Singleton
public class PrinterMonitor {
int pagesLeft = 10;
WTF_Lock lock = new WTF_Lock();
...
public static PrinterMonitor instance () {…}
public void addPaperToTray (int N) {
// Освободить ресурс – аналогично добавлению
//N страниц в лоток принтера
pagesLeft += N; }
№22 слайд![Блокирующий захват ресурса](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img21.jpg)
Содержание слайда: // Блокирующий захват ресурса Пример для Java(2):
// Блокирующий захват ресурса Пример для Java(2):
public void acquirePages (int N) {
synchronized (WTF_Lock) {
// Ждать, пока освободится N страниц
while (pagesLeft < N) {}
// Захватить нужный объём ресурса
pagesLeft -= N;
}
}
}
№23 слайд![public class SomeThreads](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img22.jpg)
Содержание слайда: public class SomeThreads { Пример для Java(3):
public class SomeThreads { Пример для Java(3):
public static void main(String args[]) {
final StringBuffer s = new StringBuffer();
// Запуск потоков, использующих ресурс
new Thread() {
public void run() {
// Блокирующий запрос ресурса
PrinterMonitor::instance().acquirePages (N);
// Использование ресурса
// Процесс освобождения ресурса
PrinterMonitor::instance().addPaperToTray (N);
}
}
№24 слайд![.start Пример для Java .start](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img23.jpg)
Содержание слайда: .start(); Пример для Java(4):
.start(); Пример для Java(4):
// Ещё один аналогичный поток
new Thread() {
public void run() {
...
PrinterMonitor.instance().acquirePages (N);
// Process doing some printing
PrinterMonitor.instance().addPaperToTray (N);
...
}
}
.start();
...
}
№25 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img24.jpg)
№26 слайд![Реализация синхронизации в](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img25.jpg)
Содержание слайда: Реализация синхронизации в Java
static Semaphore mutex = new Semaphore(1);
…
//consumer thread
void run() {
…
//critical section
mutex.acquire();
…
mutex.release();
…
}
№27 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img26.jpg)
№28 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img27.jpg)
№29 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img28.jpg)
№30 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img29.jpg)
№31 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img30.jpg)
№32 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img31.jpg)
№33 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img32.jpg)
№34 слайд![](/documents_6/70c8d8e6ee95f8aa1895fbaaccb638af/img33.jpg)