2012-05-02 17 views
14

Jaki jest powód, dla którego is_lock_free wymaga wystąpienia (jest to funkcja członka)? Dlaczego nie ma funkcji metafunkcji typu lub statycznego elementu constexpr?Dlaczego is_lock_free jest funkcją członka?

Szukam rzeczywistego przykładu, dlaczego jest to konieczne.

+0

Czy nazywa się 'is_instance_free'? Nie. QED. –

+6

Wygląda na to, że dzieje się tak z powodu wydajności [zacytuj tutaj] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html): "Wniosek zapewnia blokadę funkcje zapytań na poszczególnych obiektach zamiast na typach całkowitych, aby umożliwić nieuniknioną niewspółosiowość zmiennych atomowych bez negatywnego wpływu na wydajność dopasowanych zmiennych atomowych. " –

+2

@JesseDobre brzmienie brzmi jak odpowiedź. Dlaczego to jest komentarz? ;) –

Odpowiedz

23

Standard pozwala, aby typ był czasami bez blokady.

sekcja 29.4 lock-wolne nieruchomość

atomowej _..._ makra LOCK_FREE wskazać właściwość blokowania wolne od odpowiednich typów atomowych, z podpisanych i niepodpisanych wariantów zgrupowane razem. Właściwości mają również zastosowanie do odpowiednich (częściowych) specjalizacji szablonu atomowego. Wartość 0 wskazuje, że typy nigdy nie są blokowane. Wartość 1 oznacza , że typy są czasami wolne od blokady. Wartość 2 wskazuje, że typy są zawsze wolne od blokady.

W C++ atomic paper n2427 stany Powodem:

... Wniosek przewiduje blokady wolna czasu wykonywania funkcji zapytań raczej niż kompilacji stałych ponieważ kolejne implementacje platformie mogą uaktualnić blokowania operacje z blokadami, czyli , powszechne jest, że systemy wyodrębniają takie obiekty za bibliotekami dynamicznymi , a my chcemy pozostawić tę możliwość otwartą. Ponadto, zalecamy, aby implementacje bez sprzętowej pomocy atomowej stosowały tę technikę w postaci . ...

a także (jak Jesse Good podkreślić):

Wniosek przewiduje blokady wolne funkcje zapytań na temat poszczególnych obiektów niż całych rodzajów celu umożliwienia nieunikniony mylące zmienne atomowych bez pogarszania wydajności wyrównane zmienne atomowe

+0

Dodałem w innym cytacie dla kompletności. – Pubby

+0

Pewnie. Ta część jest również istotna dla twojego pytania. Tęsknie za tym. – user2k5

+0

Mogę też sobie wyobrazić implementację ze stałą liczbą wartości atomowych lub somesuch. – Yakk