-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!.POSTED!not-for-mail
From: Edek <e...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: pytanie z mutexów
Date: Mon, 1 Jul 2013 11:02:13 +0000 (UTC)
Organization: ATMAN - ATM S.A.
Lines: 115
Message-ID: <kqrnjk$fgq$1@node2.news.atman.pl>
References: <5...@g...com>
<51c56394$0$28103$c3e8da3$91613603@news.astraweb.com>
<f...@4...com>
<kq70gf$ngh$1@mx1.internetia.pl>
<3...@4...com>
<kq7g4r$a05$1@mx1.internetia.pl>
<f...@4...com>
<kqi854$v85$1@mx1.internetia.pl>
<u...@4...com>
<kqk43i$sfo$1@mx1.internetia.pl>
<a...@4...com>
<kqqbud$j5h$1@mx1.internetia.pl> <kqqg26$pa6$8@node2.news.atman.pl>
<kqrkrs$ka6$1@mx1.internetia.pl>
NNTP-Posting-Host: 87-205-33-79.adsl.inetia.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: node2.news.atman.pl 1372676533 15898 87.205.33.79 (1 Jul 2013 11:02:13 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Mon, 1 Jul 2013 11:02:13 +0000 (UTC)
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
Xref: news-archive.icm.edu.pl pl.comp.programming:203925
[ ukryj 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
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-29 Dławik CM
- 2024-11-29 [OT] Lewe oprogramowanie
- 2024-11-29 Błonie => Sales Specialist <=
- 2024-11-29 Warszawa => IT Expert (Network Systems area) <=
- 2024-11-29 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2024-11-29 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-29 Białystok => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-29 Pómpy ciepła darmo rozdajoo
- 2024-11-29 Białystok => Application Security Engineer <=
- 2024-11-29 Białystok => Programista Full Stack (.Net Core) <=
- 2024-11-29 Gdańsk => Software .Net Developer <=
- 2024-11-29 Wrocław => Key Account Manager <=
- 2024-11-29 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-29 Chrzanów => Specjalista ds. public relations <=
- 2024-11-27 Re: UseGalileo -- PRODUKTY I APLIKACJE UŻYWAJĄ JUŻ DZIŚ SYSTEMU GALILEO