2009-07-26 17 views

Odpowiedz

5

Szukacie atomowych wbudowanych gcc full memory barrier.

Uwaga szczegółów na odniesienie dałem tutaj mówi

[następującego] builtins mają być zgodne z zasadami opisanymi w Intel Itanium procesorowa konkretnego zastosowania Binary Interfejs sekcja 7.4 . W związku z tym odbiegają od normalnej praktyki GCC używania prefiksu "__builtin_", a ponadto są przeciążone, tak że działają na wielu typach.

+0

Nie jestem zbyt obeznany z tym tematem. Czy jest to funkcja specyficzna dla procesora? (Ponieważ twój przykład to Itanium ...) –

+0

Ogólnie rzecz biorąc, użytkownicy nie powinni korzystać z funkcji specyficznej dla platformy i kompilatora, gdy istnieją standardowe, międzyplatformowe mechanizmy osiągnięcia tego samego efektu. To, czego naprawdę potrzebuje emg-2, to użycie biblioteki wątków POSIX (pthreads). –

+0

@Michael, Całkowicie zgadzam się z twoją opinią. To jest powód wyróżniania notatek specyficznych dla platformy. – nik

7

Posix defines a number of functions działa jako bariera pamięci. Lokalizacja pamięci nie może być współbieżnie używana; Aby temu zapobiec, używaj synchronizacji - i ta synchronizacja będzie również działała jako bariera.

+1

Synchronizacja nie jest potrzebna, gdy wszystko, czego potrzebujemy, to blokada i czekanie wolnej kolejki jednego pisarza/jednego czytnika. Biblioteki POSIX nie udostępniają operacji Mfence/lfence/sfence AFAIK. –

+2

Nie prosiłeś o operację bez blokady; prosiłeś o bariery pamięci w przestrzeni użytkownika. POSIX je ma; nazywane są one "pthread_mutex_lock", "pthread_mutex_unlock" itp. Możesz nie lubić modelu za nimi, ale to * jest * oficjalną odpowiedzią na twoje pytanie. –

2

Linux x64 oznacza, że ​​można używać instrukcji zapory pamięci Intel. Można owinąć je w makr podobnych do tych, w nagłówkach Linux, jeśli te makra nie są odpowiednie lub dostępne do kodu

+0

Myślę, że to jest najlepsza opcja. Główną wadą jest wymagana konserwacja odrębnych kompilatorów i procesorów przeszłych/przyszłych/innych niż Intel. –

+0

Więc czego chcesz? Nie podoba ci się rozwiązanie przenośne i nie podoba ci się ten, który jest specyficzny dla procesora. –

0

W include/arch/qatomic_*.h nagłówki ostatnich dystrybucji Qt include (LGPL) kod na wielu architekturach i wszelkiego rodzaju bariery pamięciowe (nabycie, wydanie, oba).

4

Stosować libatomic_ops. http://www.hpl.hp.com/research/linux/atomic_ops/

Nie jest to specyficzne dla kompilatora i mniej błędne niż rzeczy GCC. To nie jest gigantyczna biblioteka, która zapewnia mnóstwo funkcji, których nie obchodzi. Po prostu zapewnia operacje atomowe. Ponadto jest przenośny dla różnych architektur procesorów.

Powiązane problemy