• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dostęp do usuniętego mutexu

0 głosów
56 wizyt
pytanie zadane 3 dni temu w C i C++ przez RufinB Użytkownik (670 p.)
Załóżmy że mamy listę w której każdy węzeł ma własny mutex. W pierwszym wątku dochodzi do usunięcia pierwszego elementu tej listy dla tego następuje zablokowanie dwóch mutexow węzła pierwszego i następnego. W tym samym czasie w drogim wątku jakąś operacja próbuje także zablokować pierwszy mutex nie może więc czeka. Co zrobi kompilator po usunięciu węzła pierwszego w którym znajduje się mutex o którego zablokowanie ubiega się drugi wątek a który już nie istnieje
komentarz 3 dni temu przez overcq Pasjonat (17,750 p.)

W przykładzie podanym na tej stronie pod hasłem “Nes­ted Lo­c­king Wi­th a Sin­gly Lin­ked List” jest podane, że pierwszy element zawsze jest obecny.

2 odpowiedzi

0 głosów
odpowiedź 2 dni temu przez tangarr VIP (138,360 p.)
Jakikolwiek dostęp do listy powinien być zabezpieczony wspólnym mutexem. Jeżeli jeden wątek próbuje czytać/pisać po danych kasowanych w tym czasie przez inny wątek to w najlepszym razie dostaniesz błąd ochrony pamięci i program się wysypie. W gorszej sytuacji jeszcze inny wątek może przydzielić sobie tą pamięć i dostajesz błędy których nie da się łatwo namierzyć.
0 głosów
odpowiedź 1 dzień temu przez jankustosz1 Nałogowiec (30,440 p.)

https://en.cppreference.com/w/cpp/thread/mutex/~mutex

Usuwanie mutexów które mogą być zablokowane jest błędem i wszystko może się po tym wydarzyć. Rozumiem koncepcje, że chcesz mieć listę na której w jednym momencie można w różnych miejscach wykonywać operacje. O ile odczyt i modyfikacja wartości nie powinna być problemem, to usuwanie węzłów już chyba jest. Na pewno po odłączeniu węzła nie można od razu go usuwać. Kolejna rzecz jest, że zawsze po zrobieniu locka trzeba by jeszcze sprawdzać czy node nie został już usunięty, jeżeli tak to np. można odwołać się do listy i wykonać operację ponownie, lub być można właśnie o wartość z tego noda nam chodziło i wszystko będzie git? Jest tu dużo różnych aspektów które trzeba wziąć pod uwagę i łatwo się pomylić.

Podobne pytania

+2 głosów
1 odpowiedź 284 wizyt
0 głosów
1 odpowiedź 158 wizyt
0 głosów
2 odpowiedzi 310 wizyt

88,311 zapytań

136,904 odpowiedzi

305,517 komentarzy

58,593 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...