Głównym powodem używania atomów przez muteksy jest to, że muteksy są drogie, ale z domyślnym modelem pamięci dla atomics
będącym memory_order_seq_cst
, czy to nie jest tak drogie?Czy synchronizacja z `std :: mutex` jest wolniejsza niż z` std :: atomic (memory_order_seq_cst) `?
Pytanie: Czy jednoczesny program korzystający z blokad może działać tak szybko, jak współbieżny program blokujący?
Jeśli tak, może nie być warta wysiłku, chyba że chcę użyć atomu w postaci memory_order_acq_rel
.
Edit: I może być czegoś brakuje, ale nie może być oparte blokady szybciej niż wolne blokady zamka, ponieważ każdy będzie musiał mieć pełną bariera pamięci też. Ale z blokadą można używać technik mniej restrykcyjnych niż barier pamięci.
Wracając do mojego pytania, czy blokowanie jest szybsze niż blokowanie oparte na nowym standardzie C++ 11 z domyślnym memory_model
?
Czy "blokuje się" = blokuje się, gdy mierzona jest wydajność "prawda? Załóżmy 2 wątki sprzętowe.
Edit 2: Moje pytanie nie jest o gwarancji postępy i może używam "lock-free" wyrwane z kontekstu.
Zasadniczo, gdy masz 2 wątki z pamięcią wspólną i jedyną gwarancją, której potrzebujesz, jest to, że jeśli jeden wątek pisze, a drugi wątek nie może odczytać ani zapisać, moje założenie jest takie, że prosta operacja atomowa compare_and_swap
byłaby znacznie szybciej niż blokowanie muteksa.
Ponieważ jeśli jeden wątek nigdy nie dotknie pamięci współdzielonej, w kółko skończy się blokowanie i odblokowywanie, ale przy operacjach atomowych używasz tylko jednego cyklu procesora za każdym razem.
W odniesieniu do komentarzy, spin-lock vs mutex-lock jest bardzo różny, gdy istnieje bardzo mały spór.
Cóż, istnieją różne gwarancje postępu między blokadami, blokadą i kodem bezczynności. –
[Obowiązkowe czytanie] (http://www.1024cores.net/home/lock-free-algorithms). –
Oglądaj: https://www.youtube.com/watch?v=DCdGlxBbKU4 – NoSenseEtAl