Содержание
- 2. MOTOROLA EDUCATION CENTER in SPbSTU ОСНОВНЫЕ ПОНЯТИЯ Активность – совокупность действий (операций), направленная на достижение некоторой
- 3. MOTOROLA EDUCATION CENTER in SPbSTU PAR P Q a b c d e f
- 4. MOTOROLA EDUCATION CENTER in SPbSTU УСЛОВИЯ БЕРНСТАЙНА Достаточные условия Бернстайна Пусть R(P) – набор входных переменных
- 5. MOTOROLA EDUCATION CENTER in SPbSTU ТРЕБОВАНИЯ К АЛГОРИТМАМ ОРГАНИЗАЦИИ ПРОЦЕССОВ Пять условий хорошего алгоритма организации взаимодействия
- 6. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ – ЗАПРЕТ ПРЕРЫВАНИЙ Наиболее простой подход while (some condition) {
- 7. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ – ПЕРЕМЕННАЯ-ЗАМОК Используем переменную-замок с начальным значением true, доступную всем
- 8. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ – СТРОГОЕ ЧЕРЕДОВАНИЕ Используем общую переменную с начальным значением 0,
- 9. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ – ФЛАГИ ГОТОВНОСТИ Недостаток предыдущего алгоритма в том, что процессы
- 10. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ ПЕТЕРСОНА Пусть оба процесса имеют доступ к разделяемым массиву флагов
- 11. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ БУЛОЧНОЙ (Bakery algorithm) Алгоритм для n взаимодействующих процессов. Идея алгоритма:
- 12. MOTOROLA EDUCATION CENTER in SPbSTU АЛГОРИТМ БУЛОЧНОЙ (продолжение) ,где (a,b) = ai для всех i =
- 13. MOTOROLA EDUCATION CENTER in SPbSTU Мьютекс это простейший двоичный семафор, который может находиться в одном из
- 14. MOTOROLA EDUCATION CENTER in SPbSTU Реализация функциональности прототипов void WTF_InitCritSect(CRIT_SECTION * cs) { pthread_mutex_init(cs, NULL); }
- 15. MOTOROLA EDUCATION CENTER in SPbSTU Реализация синхронизации в Java: static class WTF_Lock extends Object {} static
- 16. Пример для C++(1): // Библиотека потоков POSIX #include typedef pthread_mutex_t CRIT_SECTION; .... // Функции для работы
- 17. void main (void) { Пример для C++(2): pthread_t task1, task2, task3; ... // Создпние потоков, которые
- 18. void * TaskThread (void* threadInfo) { Пример для C++(3): // Код, конфигурирующий работу потока согласно //
- 19. // Паттерн Singleton Пример для C++(4): const int gPagesTotal = 10; // Общий объём ресурса class
- 20. // Блокирующий захват ресурсов Пример для C++(5): void acquirePages (int N) { WTF_EnterCritSect (& lock); //
- 21. static class WTF_Lock extends Object {} Пример для Java(1): static public WTF_Lock lockObject = new WTF_Lock();
- 22. MOTOROLA EDUCATION CENTER in SPbSTU // Блокирующий захват ресурса Пример для Java(2): public void acquirePages (int
- 23. MOTOROLA EDUCATION CENTER in SPbSTU public class SomeThreads { Пример для Java(3): public static void main(String
- 24. MOTOROLA EDUCATION CENTER in SPbSTU .start(); Пример для Java(4): // Ещё один аналогичный поток new Thread()
- 25. MOTOROLA EDUCATION CENTER in SPbSTU Мьютекс (Mutex) для Java Это простейший двоичный семафор, который может находиться
- 26. Реализация синхронизации в Java static Semaphore mutex = new Semaphore(1); … //consumer thread void run() {
- 27. MOTOROLA EDUCATION CENTER in SPbSTU Паттерн Singleton Это паттерн проектирования, который гарантирует, что в приложении будет
- 28. MOTOROLA EDUCATION CENTER in SPbSTU Singleton. Enum public enum SingletonEnum { //Singleton object INSTANCE; .. }
- 29. MOTOROLA EDUCATION CENTER in SPbSTU Singleton. Double Checked Locking & volatile public final class PrinterMonitor {
- 30. MOTOROLA EDUCATION CENTER in SPbSTU Singleton. Double Checked Locking & volatile Реализация называется Double Checked Locking
- 31. MOTOROLA EDUCATION CENTER in SPbSTU Singleton. Use example (1) final class PrinterMonitor { private static volatile
- 32. //resource release public void addPaperToTray(int value) { try { lockRelease.lockInterruptibly(); pagesLeft += value; } catch (InterruptedException
- 33. MOTOROLA EDUCATION CENTER in SPbSTU Singleton. Use example (3) //processing thread public class Worker implements Runnable
- 35. Скачать презентацию