Widziałem TVar
jest prosty pojemnik, a TMVar
jest taki sam jak MVar
, co oznacza, że ma zamek itp., Ale w monadę STM
. Zastanawiam się, dlaczego byłoby to konieczne, ponieważ idea STM
polega na tym, aby zamki były niepotrzebne.Różnica między TVar i TMVar
Który z nich należy użyć, jeśli, na przykład, masz typ, taki jak [Handle]
, listę uchwytów gniazd, których chcesz użyć między wątkami utworzonymi przez forkIO
?
W jaki sposób "ponowienie" spowodowałoby zakleszczenia?Wycofuje bieżącą transakcję, a następnie blokuje, aż sytuacja zmieni się w jakiś sposób. Nie blokuje (w rzeczywistości nie może) transakcji. –
Mimo że w środku transakcji nie nastąpi zakleszczenie, można utworzyć transakcje, które nigdy nie powiodą się w sposób podobny do klasycznych zakleszczeń, takich jak dwie transakcje oczekujące na wyniki drugiej strony. Nie jest od razu oczywiste, jak to się różni od impasu w praktyce. – Rotsor
Ah, racja. Uważam, że właściwym terminem jest, odpowiednio, "livelock". Jest to raczej rodzaj głodu zasobów, niż jest jak impas. Podczas gdy impasy mogą łatwo wyniknąć z niepowiązanych zastosowań tych samych zasobów, uważam, że optymistyczny charakter STM sprawia, że locklocki są mało prawdopodobne, chyba że istnieje bezpośredni konflikt lub bardzo wysoki ogólny spór. –