-
Data: 2013-07-01 18:24:17
Temat: Re: pytanie z mutexów
Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 01.07.2013 13:02, Edek wrote:
> Dnia pamiętnego Mon, 01 Jul 2013 12:05:05 +0200, Michoo wyjmując peta
> oznajmił:
>
>> On 01.07.2013 01:47, Edek wrote:
>
>>> Do zagłodzenia może dojść.
>>
>> Jest jeszcze gorzej - nie ma warunku postępu.
>
> To nie jest gorzej. Możliwy deadlock/starvation zawsze kiedyś się zdarzą,
> tego typu live-lock nawet jeżeli się zdarzy, to tymczasowo.
live-lock to starvation na dostępie do sekcji krytycznej.
Spotykałem kilkakrotnie z softem który przestawał działać po
przeniesieniu na dwa rdzenie i tak jak deadlock od razu widać bo "staje"
tak live-lock ma w praktyce ciekawsze objawy - np strasznie powolna
praca z obciążeniem dwóch rdzeniu (pozornie bez powodu, strace pokazuje
ciągłe try_lock) albo występujące raz na jakiś czas zacięcie. Ciężko to
nazwać "działaniem" gdy procesy 90% czasu walczą o dostęp do sekcji
krytycznej.
>>
>> Nie zrozumiałem. Skoro kolejką emulujemy listę oczekujących na muteksie
>> to oczywistym jest, że ona musi być współdzielona.
>
> Na którym mutexie miałaby być lista wszystkich sąsiadów?
> Nie da się
> podzielić grafu w ten sposób.
Nieistotne - cała ta dyskusja zaczęła się od "gdyby implementacja nie
zapewniała", znane mi zapewniają - można zobaczyć kod źródłowy choćby z
pthreads.
>
>>> Wiele algorytmów "wątkowych" nie ma ani standardu ani nazwy.
>>
>> Istnieją pewne "wzorce" czy "idiomy". Nie znałem takiego. Jak widać
>> wystarczyła drobna wariacja tego co przedstawiłem.
>
> W algorytmach wątkowych najczęściej nie ma czegoś takiego jak
> drobna wariacja. W zasadzie każda zmiana, nawet drobna, wymaga
> dowodu od początku.
Chyba nie przeczytałeś tego co pisałem ani pracy linkowanej przez A.L.
To jest drobna wariacja, bo udowadniasz najpierw to rozwiązanie
przedstawione przeze mnie a następnie dowodzisz jedynie, że po uzyskaniu
kompletu blokad pozostawienie jedynie blokady odpowiadającej
identyfikatorowi danego procesu nie narusza ograniczeń a zwiększa
stopień równoległości.
Dowód jest trywialny:
skoro:
1. rozwiązanie 1 zapewnia zarówno bezpieczeństwo jak i postęp (co
dowiedziono wcześniej)
2. procesy które bezpośrednio konfliktują zawierają się nawzajem na
swoich listach
3. wszystkie procesy konfliktujące ze sobą przed wejściem do sekcji
krytycznej muszą uzyskać _wszystkie_ muteksy z listy
4. muteksy pobierane są w kolejności, nie jest możliwe pobranie muteksu
i+1 przed pobraniem muteksu i
to:
- na podstawie 3. widzimy, że po wejściu do sekcji krytycznej posiadanie
przez proces Xi jedynie po jednym muteksie z list wszystkich procesów z
którymi konfliktuje nadal zapewnia bezpieczeństwo
- na podstawie 2. widzimy, że jeżeli proces Pi konfliktuje z procesem Pj
to proces Pj zawiera na swojej liście muteks Mi
Tak więc po wejściu do sekcji krytycznej jeżeli proces Pi zwolni
wszystkie muteksy poza Mi to bezpieczeństwo jest nadal zachowane.
Postęp jest zapewniany przez uszeregowanie (co dowiedzione jest w
dowodzie algorytmu podstawowego) - nie naruszamy go w żaden sposób.
Ponieważ zapewniony jest zarówno postęp jak i bezpieczeństwo to algorytm
jest poprawny.
>
> Część ludzi twierdzi, że algorytm działa po "drobnej zmianie",
> gdy _fast_pthread_once_per_thread_epoch jest nie monotonicznie
> rosnąca ale flagą - a łatwo udowodnić, że wtedy całość się rozsypie.
>
Tak, implementacja w której polega się na monotoniczności się sypie gdy
jej nie ma, kto twierdzi inaczej?
Co do samego algorytmu - potrzebne są trzy stany:
przed_inicjalizacją, w_trakcie, po_inicjalizacji, nie da się tego zrobić
na JEDNEJ fladze binarnej, można by użyć dwóch(i wprowadzić odpowiednie
poprawki), ale po co?
> Każda zmiana wymaga dowodu od początku.
Nieprawda. Każda zmiana wymaga dowodu od miejsca gdzie zostaje wprowadzona.
>
> Zazwyczaj w takich sytuacjach używa się:
> a = try_get()
> if (a == null) {
> zwolnij_wszystkie_locki
> a = get();
> od początku ustawiamy się w kolejce do locków
> }
try_get to nie jest rozwiązanie lock_free[*].
lock free oznacza, że nie występuje sytuacja w której wykonanie jednego
wątku jest blokowane przez inny - wątki pracują cały czas (aktywne
oczekiwanie) a w każdej rundzie dokładnie jednemu się powodzi.
[*] "Pod spodem" jest bo w ogóle futex jest implementowany na pierwszym
poziomie jako atomowa flaga, ale semantycznie jest to klasyczny mutex.
> Dlatego, że try_get zamyka jeden lock jako ostatni, na krótko,
> bez wait(),
Ale wcześniejsze zamki masz z wait, to gdzie tu lock-free?
> a jeżeli ma być wait() to już trzeba wszystko zwolnić
> bo wait() zalicza się w myśleniu o deadlockach do locków.
lock() zawiera w środku niejawne wait() - to nie jest wg mnie
rozwiązanie lock-free.
--
Pozdrawiam
Michoo
Następne wpisy z tego wątku
- 01.07.13 18:30 Michoo
- 01.07.13 18:36 Michoo
- 01.07.13 19:08 Edek
- 01.07.13 21:47 Edek
- 01.07.13 22:01 Edek
- 02.07.13 18:16 Michoo
- 02.07.13 19:56 Edek
- 02.07.13 21:18 Michoo
- 02.07.13 23:06 Edek
- 03.07.13 02:29 Michoo
- 03.07.13 04:08 Edek
- 09.07.13 14:42 firr
- 10.07.13 15:41 firr
Najnowsze wątki z tej grupy
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
Najnowsze wątki
- 2025-06-22 Re: Czy Bodnar to prawny Makiawel? [Prawo "w likwidacji"]
- 2025-06-21 Sąd Najwyższy ukarał "karą porządkową" 3_000 PLN za protest wyborczy z "wulgaryzmami osobowymi"
- 2025-06-21 Gdzie kupowac aku?
- 2025-06-21 Listwa przypodłogowa pod kominek
- 2025-06-21 Czy warto miec wy....anego na sucho premiera?
- 2025-06-21 Warszawa => Analityk IT (projekty z obszaru telco) <=
- 2025-06-21 Warszawa => Operations Support Systems (OSS) Team Leader <=
- 2025-06-21 Warszawa => Scrum Master <=
- 2025-06-21 Warszawa => Senior Account Manager <=
- 2025-06-20 5w30 zamiast 0w30
- 2025-06-19 Klima i samodzielne uzupełnienie
- 2025-06-20 Upgrade z i7-6xxx
- 2025-06-19 Czy ołowiane perowsiki, drukowane na folii to był fake ?
- 2025-06-20 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-06-20 Gdynia => Sales Executive / KAM <=