Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Podobne dokumenty
Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Wzorce logiki dziedziny

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie obiektowe

Programowanie komputerów

Współbieżność w środowisku Java

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Zadanie 2: transakcyjny protokół SKJ (2015)

Programowanie poprzez testy z wykorzystaniem JUnit

Plan wykładu. Przykład. Wprowadzenie BAZY DANYCH. Transakcje Hurtownie danych

Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy

Programowanie obiektowe

Wstęp do programowania 2

Wzorce dystrybucji i wspólbieżności autonomicznej

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Algorytmy zarządzania współbieżnym wykonywaniem transakcji część I

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wątki w Javie. Piotr Tokarski

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie Komponentowe WebAPI

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

Programowanie współbieżne Wykład 7. Iwona Kochaoska

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Kurs programowania. Wykład 8. Wojciech Macyna

programowanie w oparciu o platformę netbeans w praktyce

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe i zdarzeniowe

SOP2 - semafory. grudzień

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

Klasy abstrakcyjne i interfejsy

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

Programowanie obiektowe

Programowanie obiektowe

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Bazy danych. Andrzej Łachwa, UJ, /15

Wykład 4: Klasy i Metody

Wielowersyjne metody synchronizacji transakcji

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Detekcja zakleszczenia (1)

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Generatory. Michał R. Przybyłek

Współbieżność w Javie

Zaawansowany kurs języka Python

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Aplikacje RMI

Tworzenie aplikacji w języku Java

Wprowadzenie do języka Java

Wprowadzenie. Dariusz Wawrzyniak 1

Systemy Rozproszone Technologia ICE

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Programowanie obiektowe w VB cz 2

Aplikacje w Javie- wykład 11 Wątki-podstawy

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Programowanie Równoległe i Rozproszone

Integracja komunikatora opartego o protokół XMPP z dużym portalem internetowym

Język Java wątki (streszczenie)

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Klasy i obiekty cz II

Polimorfizm. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

przykłady problemów; realizacja dostaw części od producenta do klienta:

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

5. Model komunikujących się procesów, komunikaty

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

4. Procesy pojęcia podstawowe

Java Persistence API - zagadnienia zaawansowane

Program szkolenia: Continuous Integration i Git

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Algorytm Lamporta. Czy można to ulepszyć?

Lista dwukierunkowa - przykład implementacji destruktorów

Transkrypt:

Konrad Błachnio K.Blachnio@students.mimuw.edu.pl MIMUW 19 maja 2010

1 Co to jest? API Implementacja 2 ILockManagerWithDetecting s - straszny zamek 3 4 Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap

Co to jest lock manager? Co to jest? API Implementacja Wikipedia: A distributed lock manager (DLM) provides distributed applications with a means to synchronize their accesses to shared resources.

Co to jest lock manager? Co to jest? API Implementacja Wikipedia: A distributed lock manager (DLM) provides distributed applications with a means to synchronize their accesses to shared resources. Czyli: Moduł zarządzający zamkami zapewniający rozproszonym aplikacjom możliwość synchronizowania dostępu do współdzielonych zasobów.

- cechy Co to jest? API Implementacja Specyfika zarządcy zamków - Jest jeden - Musi obsługiwać wiele (dziesiątek) procesów - Musi obsługiwać wiele (milionów) zamków

- cechy Co to jest? API Implementacja Specyfika zarządcy zamków - Jest jeden - Musi obsługiwać wiele (dziesiątek) procesów - Musi obsługiwać wiele (milionów) zamków Pożądane cechy zarządcy zamków - Bezbłędność - Współbieżna obsługa tak dużej ilości procesów jak to możliwe - Duża szybkość działania - Niewielki rozmiar - Racjonalne zarządzanie zasobami

Lock manager wizualizacja Co to jest? API Implementacja

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden - Concurrent Read (CR) czyli współbieżne czytanie

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden - Concurrent Read (CR) czyli współbieżne czytanie - Concurrent Write (CW) czyli współbieżne pisanie oraz czytanie

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden - Concurrent Read (CR) czyli współbieżne czytanie - Concurrent Write (CW) czyli współbieżne pisanie oraz czytanie - Protected Read (PR) czyli wyłączne czytanie

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden - Concurrent Read (CR) czyli współbieżne czytanie - Concurrent Write (CW) czyli współbieżne pisanie oraz czytanie - Protected Read (PR) czyli wyłączne czytanie - Protected Write (PW) czyli wyłączne pisanie

Zamki - typy Co to jest? API Implementacja Typ dostępu do zasobu (obiektu) - None Lock (NL) czyli żaden - Concurrent Read (CR) czyli współbieżne czytanie - Concurrent Write (CW) czyli współbieżne pisanie oraz czytanie - Protected Read (PR) czyli wyłączne czytanie - Protected Write (PW) czyli wyłączne pisanie - Exclusive (EX) czyli wyłączne wszystko

Zamki - tabela dostępu Co to jest? API Implementacja

Zamek - cechy Co to jest? API Implementacja Specyfika zamka - Jest wiele zamków na raz (jeden dla każdego obiektu) - Musi obsługiwać wiele (kilka) procesów

Zamek - cechy Co to jest? API Implementacja Specyfika zamka - Jest wiele zamków na raz (jeden dla każdego obiektu) - Musi obsługiwać wiele (kilka) procesów Pożądane cechy zamków - Chcemy aby były małe - Chcemy aby obsługiwały wszystkie poziomy - Powinien działać tak szybko jak to możliwe

Dwa poziomy problemu Co to jest? API Implementacja Organizacja (implementacja) zamka - Aby był możliwie mały - Aby wspierał wszystkie poziomy - Aby był maksymalnie współbieżny

Dwa poziomy problemu Co to jest? API Implementacja Organizacja (implementacja) zamka - Aby był możliwie mały - Aby wspierał wszystkie poziomy - Aby był maksymalnie współbieżny Organizacja (implementacja) zarządcy - Aby działał poprawnie - Aby był maksymalnie współbieżny - Aby był maksymalnie szybki - Aby był maksymalnie mały

Co to jest? API Implementacja Application Programming Interface API (interfejs programowania aplikacji) ILockManager

Co to jest? API Implementacja Application Programming Interface API (interfejs programowania aplikacji) ILockManager ILockManagerWithOwnerTracing<OWNER>

Co to jest? API Implementacja Application Programming Interface API (interfejs programowania aplikacji) ILockManager ILockManagerWithOwnerTracing<OWNER> ILockManagerWithDetecting<OWNER>

ILockManager - API Co to jest? API Implementacja Przegląd dostępnych funkcji i parametry void getlock(long objid, Type locktype) void releaselock(long objid, Type LockType)

ILockManager - API Co to jest? API Implementacja Przegląd dostępnych funkcji i parametry void getlock(long objid, Type locktype) void releaselock(long objid, Type LockType) void promotelock(long objid, Type locktype, Type newtype) void demotelock(long objid, Type locktype, Type newtype)

ILockManager - API Co to jest? API Implementacja Przegląd dostępnych funkcji i parametry void getlock(long objid, Type locktype) void releaselock(long objid, Type LockType) void promotelock(long objid, Type locktype, Type newtype) void demotelock(long objid, Type locktype, Type newtype) void changelock(long objid, Type locktype, Type newtype)

Co to jest? API Implementacja ILockManagerWithOwnerTracing<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype)

Co to jest? API Implementacja ILockManagerWithOwnerTracing<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype) Type checkcurrentlocktype(owner owner, long objectid)

Co to jest? API Implementacja ILockManagerWithOwnerTracing<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype) Type checkcurrentlocktype(owner owner, long objectid) void interruptcurrentcalls(owner owner) void releasealllocksownedby(owner owner)

Pomysł na implementację Co to jest? API Implementacja Bierzemy współbieżną strukturę danych

Pomysł na implementację Co to jest? API Implementacja Bierzemy współbieżną strukturę danych ConcurrentHashMap Hashtable

Pomysł na implementację Co to jest? API Implementacja Bierzemy współbieżną strukturę danych ConcurrentHashMap Hashtable Sami implementujemy współbieżną strukturę danych

Pomysł na implementację Co to jest? API Implementacja Bierzemy współbieżną strukturę danych ConcurrentHashMap Hashtable Sami implementujemy współbieżną strukturę danych Lock Synchronized

getlock Co to jest? API Implementacja... if (data.containskey(objectid)) objectlock = data.get(objectid); else { objectlock = new Lock(); data.put(objectid, objectlock); } objectlock.getlockfor(objectid, locktype);...

releaselock Co to jest? API Implementacja... objectlock.release(objectid, locktype); if (objectlock.isempty) data.remove(objectid);...

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock - getlock i releaselock

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock - getlock i releaselock - promotelock i releaselock

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock - getlock i releaselock - promotelock i releaselock Dlaczego te są w porządku? - promotelock i promotelock

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock - getlock i releaselock - promotelock i releaselock Dlaczego te są w porządku? - promotelock i promotelock - promotelock i demotelock

Anomalie danych Co to jest? API Implementacja Wyścig procesów - getlock i getlock - getlock i releaselock - promotelock i releaselock Dlaczego te są w porządku? - promotelock i promotelock - promotelock i demotelock - demotelock i releaselock

Naprawa anomalii Co to jest? API Implementacja Atomowe operacje - getlock w stosunku do getlock

Naprawa anomalii Co to jest? API Implementacja Atomowe operacje - getlock w stosunku do getlock - getlock i promotelock w stosunku do releaselock

ILockManagerWithDetecting s - straszny zamek ILockManagerWithDetecting<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype) Type checkcurrentlocktype(owner owner, long objectid) void interruptcurrentcalls(owner owner) void releasealllocksownedby(owner owner)

ILockManagerWithDetecting s - straszny zamek ILockManagerWithDetecting<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype) Type checkcurrentlocktype(owner owner, long objectid) void interruptcurrentcalls(owner owner) void releasealllocksownedby(owner owner) WaitingForLockOn<OWNER> public OWNER getowner() public long getwaitingforlockon()

ILockManagerWithDetecting s - straszny zamek ILockManagerWithDetecting<OWNER> - API Przegląd dostępnych funkcji i parametry void getlock(owner owner, long objectid, Type newtype) void releaselock(owner owner,long objectid) void promotelock(owner owner,long objectid, Type newtype) void demotelock(owner owner,long objectid, Type newtype) void changelock(owner owner,long objectid, Type newtype) Type checkcurrentlocktype(owner owner, long objectid) void interruptcurrentcalls(owner owner) void releasealllocksownedby(owner owner) WaitingForLockOn<OWNER> public OWNER getowner() public long getwaitingforlockon() void setoncallback(callback<list<waitingforlockon<owner», RuntimeException> deadlockcallback)

- zakleszczenie, definicja ILockManagerWithDetecting s - straszny zamek Wikipedia: A deadlock is a situation when two or more processes are each waiting for each other to release a resource.

- zakleszczenie, definicja ILockManagerWithDetecting s - straszny zamek Wikipedia: A deadlock is a situation when two or more processes are each waiting for each other to release a resource. Czyli: Do zakleszczenia dochodzi gdy dwa, lub więcej procesów, czekają wzajemnie na zwolnienie zasobu trzymanego przez drugi proces.

- przykład ILockManagerWithDetecting s - straszny zamek

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 1 - Ignorujemy

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 1 - Ignorujemy Zalety: - Banalna implementacja

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 1 - Ignorujemy Zalety: - Banalna implementacja Wady: - Cała odpowiedzialność na głowie użytkownika - Zawieszanie się aplikacji

- przykład ILockManagerWithDetecting s - straszny zamek

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 2 - Wprowadzamy timeout

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 2 - Wprowadzamy timeout Zalety: - Prostota implementacji - Użytkownik nie musi dużo robić

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 2 - Wprowadzamy timeout Zalety: - Prostota implementacji - Użytkownik nie musi dużo robić Wady: - Wartość timeoutu

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 3 - Dajemy użytkownikowi możliwość interrupt

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 3 - Dajemy użytkownikowi możliwość interrupt Zalety: - Pozostawiamy użytkownikowi dużą dozę swobody

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 3 - Dajemy użytkownikowi możliwość interrupt Zalety: - Pozostawiamy użytkownikowi dużą dozę swobody Wady: - Pozostawiamy użytkownikowi dużą dozę swobody

- przykład ILockManagerWithDetecting s - straszny zamek

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 4 - Błąkacz czyli timeout i interrupt

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 4 - Błąkacz czyli timeout i interrupt Zalety: - Użytkownik nie musi nic robić

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 4 - Błąkacz czyli timeout i interrupt Zalety: - Użytkownik nie musi nic robić Wady: - Wartość timeoutu - Skomplikowana implementacja - Które transakcje zwijać

- przykład ILockManagerWithDetecting s - straszny zamek

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 5 - Branie zamków w ustalonej kolejności

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 5 - Branie zamków w ustalonej kolejności Zalety: - Poprawność

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 5 - Branie zamków w ustalonej kolejności Zalety: - Poprawność Wady: - Skomplikowana implementacja - Dziwne API

ILockManagerWithDetecting s - straszny zamek - metody radzenia sobie z problemem Metoda 5 - Branie zamków w ustalonej kolejności Zalety: - Poprawność Wady: - Skomplikowana implementacja - Dziwne API Metoda 6 - straszny zamek www.cl.cam.ac.uk/~ejk39/papers/dreadlocks-spaa08.pdf

- straszny zamek ILockManagerWithDetecting s - straszny zamek

- straszny zamek ILockManagerWithDetecting s - straszny zamek Pomysł: - Wykrywać potencjalne zakleszczenia zanim one zajdą - Nie pozwalać na wzięcie zamka jeśli prowadzi to do zakleszczenia

- straszny zamek ILockManagerWithDetecting s - straszny zamek Pomysł: - Wykrywać potencjalne zakleszczenia zanim one zajdą - Nie pozwalać na wzięcie zamka jeśli prowadzi to do zakleszczenia Zalety: - Prosty pomysł - Użytkownik nie musi dużo robić

- straszny zamek ILockManagerWithDetecting s - straszny zamek Pomysł: - Wykrywać potencjalne zakleszczenia zanim one zajdą - Nie pozwalać na wzięcie zamka jeśli prowadzi to do zakleszczenia Zalety: - Prosty pomysł - Użytkownik nie musi dużo robić Wady: - Dodatkowo przechowywane dane - Dodatkowo wykonywane operacje

- jak to wygląda ILockManagerWithDetecting s - straszny zamek Założenia: - Każdy wątek wie na kogo czeka - Każdy zamek wie kto jest jego właścicielem

- jak to wygląda ILockManagerWithDetecting s - straszny zamek Założenia: - Każdy wątek wie na kogo czeka - Każdy zamek wie kto jest jego właścicielem Nie próbuję zająć żadnego zamka - Czekam tylko na siebie

- jak to wygląda ILockManagerWithDetecting s - straszny zamek Założenia: - Każdy wątek wie na kogo czeka - Każdy zamek wie kto jest jego właścicielem Nie próbuję zająć żadnego zamka - Czekam tylko na siebie Próbuję zająć zamek - Czekam na siebie - Czekam na wszystkich na których czeka właściciel zamka

- jak to wygląda ILockManagerWithDetecting s - straszny zamek Założenia: - Każdy wątek wie na kogo czeka - Każdy zamek wie kto jest jego właścicielem Nie próbuję zająć żadnego zamka - Czekam tylko na siebie Próbuję zająć zamek - Czekam na siebie - Czekam na wszystkich na których czeka właściciel zamka Zakleszczenie występuje wtedy gdy - Właściciel zamka czeka na mnie

- straszny zamek - przykład ILockManagerWithDetecting s - straszny zamek

ILockManagerWithDetecting s - straszny zamek - straszny zamek - przykład cd. Na który wątek czekają wątki z przykładu: C = {C} D = {C,D} B = {C,B} A = {C,B,A}

ILockManagerWithDetecting s - straszny zamek - straszny zamek - przykład cd. Na który wątek czekają wątki z przykładu: C = {C} D = {C,D} B = {C,B} A = {C,B,A} Wątek C próbuje zająć zamek x

ILockManagerWithDetecting s - straszny zamek - straszny zamek - przykład cd. Na który wątek czekają wątki z przykładu: C = {C} D = {C,D} B = {C,B} A = {C,B,A} Wątek C próbuje zająć zamek x Wątek B właściciel zamka x czeka na wątki {C,B}

ILockManagerWithDetecting s - straszny zamek - straszny zamek - przykład cd. Na który wątek czekają wątki z przykładu: C = {C} D = {C,D} B = {C,B} A = {C,B,A} Wątek C próbuje zająć zamek x Wątek B właściciel zamka x czeka na wątki {C,B} Zakleszczenie

: www.cl.cam.ac.uk/~ejk39/papers/dreadlocks-spaa08.pdf : http://en.wikipedia.org/wiki/distributed_lock_manager : http://en.wikipedia.org/wiki/

Dziękuję Dziękuję

Dziękuję Dziękuję Starczy czasu?

Obecna implementacja Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap Dlaczego nie jest dobrze Brzydki kod Brak komentarzy Skomplikowana implementacja?

Obecna implementacja Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap Dlaczego nie jest dobrze Brzydki kod Brak komentarzy Skomplikowana implementacja? Dlaczego jest źle Błędy w implementacji

Obecna implementacja Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap Dlaczego nie jest dobrze Brzydki kod Brak komentarzy Skomplikowana implementacja? Dlaczego jest źle Błędy w implementacji Dlaczego jest bardzo źle Błędy w założeniach

Lock vs. Synchronized Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap - Szybszy jest Lock dla większej ilości procesów - Szybszy jest Synchronized dla mniejszej ilości procesów

Hashtable vs. ConcurrentHashMap Obecna implementacja Lock vs. Synchronized Hashtable vs. ConcurrentHashMap - Szybszy jest ConcurrentHashMap dla większej ilości procesów - Szybszy jest Hashtable dla mniejszej ilości procesów