-
Data: 2013-07-01 13:02:13
Temat: Re: pytanie z mutexów
Od: Edek <e...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia pamiętnego Mon, 01 Jul 2013 12:05:05 +0200, Michoo wyjmując peta
oznajmił:
> On 01.07.2013 01:47, Edek wrote:
>> mając do zamknięcia n,m,l,... zamyka się n, a potem try_lockiem
>> pozostałe. Jeżeli któryś się nie zamknie, bo zajęty, zwalnia się już
>> zamknięte i ten który był zajęty jest pierwszy do kolejnej rundy -
>> przez co proces czeka na tym locku aż się zwolni, bo pierwszy jest lock().
>
> W takiej sytuacji możesz mieć live-lock - wystarczą już dwa procesy
> "wymieniające się" dwoma blokadami.
Praktycznie ten algorytm w implementacji boost-a ma jeszcze kilka
yieldów.
>> 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. Konsekwencje
live-locka w tym konkretnym przypadku są praktycznie wyłącznie teoretyczne.
>>>>> Każdy proces wchodząc do sekcji krytycznej pobiera potrzebne mu blokady
>>>>> w kolejności A-F. Rozwiązuje to problem wzajemnego wykluczania([*]).
>>>>> Problem zagłodzenia nie wystąpi na pewno gdy muteksy budzą w kolejności
>>>>> FIFO, przy braku tej gwarancji do zagłodzenia może dojść[**] więc
>>>>> najlepiej chyba ją zapewnić przez kombinację mutex+lista+condition
>>>>> variable (dopóki !pierwszy na liście).
>>
>> Nope. Trzeba jeszcze dopisać się do list dzielonych z pozostałymi
>> procesami, inaczej one też mogą zagłodzić/być zagłodzone, np.
>> mapa list z maską jako kluczem...
>
> 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.
>>>>> [*] Czyim imieniem nazywamy ten algorytm - nie pamiętam. Jest to daleka
>>>>> wariacja Lamporta.
>>>>> [**] Choćby a i b "wymieniające się" muteksem A mogą zagłodzić c.
>>
>> ... a wtedy a i b dopiszą się do kolejki z c i c będzie pierwsze.
>
> Nie rozumiem.
W tej pracy linkowanej przez A.L. w referencjach jest edge-based solution,
wspomniana jest we wstępie. Jeszcze nie czytałem, a sam mogłem coś pokręcić
(biorąc pod uwagę fakt że moje 10 minut < publikacja - nic dziwnego ;) ).
>> Nie przemyślałem tylko jak to zaimplementować, bo trzeba jeszcze chronić
>> same kolejki o ile nie ma kolejek lock-free z peek() i mieć jakąś
>> politykę reagowania na a przed b na jednej liście a b przed a na drugiej
>> - random() dałby radę.
>
> Używasz parę blokad:
> lock(Xa);
> dodaj_na_koniec_kolejki(procId,a);
> unlock(Xa);
>
> do{
> cond_wait(Ya);
> }while(head(a)!=procId);
> do_stuff();
> lock(Xa);
> usun_zpoczatku_kolejki(a);
> unlock(Xa);
> unlock(Ya);
Nie zrozumiałem. Gdzie jest lock(Ya)? Co robi do_stuff()? I gdzie to pasuje
do całości?
>> 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. Przykład:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2
008/n2660.htm#AppendixSource
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.
Każda zmiana wymaga dowodu od początku.
>> Schematy współpracy: skoro się wykluczają mogą w ramach wykluczenia
>> przekazywać dane. Albo mogą mieć kolejki, które są liśćmi w drzewie
>> kolejności locków, więc są pomijalne dla poprawności.
>
> Mogą. Właśnie od "mogą" zależy bardzo dużo jeżeli chodzi o wątki. Jeżeli
> masz problem producenci-konsumenci to daje się go rozwiązać lock-free.
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
}
To nie wymaga ani zmiany głównego algorytumu ani kolejek lock-free.
Dlatego, że try_get zamyka jeden lock jako ostatni, na krótko,
bez wait(), a jeżeli ma być wait() to już trzeba wszystko zwolnić
bo wait() zalicza się w myśleniu o deadlockach do locków.
--
Edek
Następne wpisy z tego wątku
- 01.07.13 13:54 Edek
- 01.07.13 14:14 Edek
- 01.07.13 15:10 Edek
- 01.07.13 15:53 A.L.
- 01.07.13 18:24 Michoo
- 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
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-30 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-06-30 Środa Wielkopolska => Konsultant wewnętrzny SAP FI/CO <=
- 2025-06-30 Białystok => Programista Mainframe (z/OS, Assembler) <=
- 2025-06-30 Warszawa => International Freight Forwarder <=
- 2025-06-30 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-06-30 Warszawa => Spedytor Międzynarodowy <=
- 2025-06-30 Lublin => Delphi Programmer <=
- 2025-06-30 Lublin => Programista Delphi <=
- 2025-06-30 Wrocław => Controlling systems Consultant <=
- 2025-06-30 Nowa tarcza do telefonu
- 2025-06-29 Spotkania z Ariane De Rotschild, szefową Iluminatów, Księżniczką Hiszpanii Leonor
- 2025-06-29 Re: Dr. Kontek (już od paru lat nie SGH) odkrył odchylenia statystyczne [PO EKSPERCIE?]
- 2025-06-28 Upadłość i zwolnienia [w Diorze, która była pol prod. głośników - przyp. JMJ]
- 2025-06-28 Taśma izolacyjna do prac elektrycznych
- 2025-06-27 Recenzja 3.1A ;) w 6 gniazdach...