2008-09-29 25 views

Odpowiedz

-1

Po dokładnym przeglądzie, this wygląda obiecująco. Przerwa w stosie Yay.

+0

Proszę nie pisać odpowiedzi tylko link. Kluczowe informacje powinny znaleźć się w odpowiedzi. Uzupełnij to linkiem za wszelką cenę. –

8

Intela open-source ThreadBuildingBlocks ma szablon, Atomic, który oferuje taką samą funkcjonalność jak klasa .NET Interlocked.

W przeciwieństwie do wbudowanych w Atomic gcc, jest to platforma wieloplatformowa i nie zależy od konkretnego kompilatora. Jak poprawnie wskazuje Nemanja Trifunovic, zależy to od instrukcji procesora compare-and-swap dostarczonej przez układy x86 i Itanium. Domyślam się, że nie spodziewałbyś się niczego innego z biblioteki Intela:)

6

Ściśle mówiąc, Linux nie może zaoferować atomowych "powiązanych ze sobą" funkcji jak w Win32, ponieważ te funkcje wymagają wsparcia sprzętowego, a Linux działa na niektórych platformach nie oferuję tego wsparcia. Powiedziawszy to, jeśli możesz ograniczyć się do Intel x86/x64, spójrz na implementację liczenia odwołań w bibliotece Udostępniaj współużytkowane wskaźniki.

8

Kilka uwag w celu wyjaśnienia problemu, który nie ma nic wspólnego z Linux.

RWM (read-modify-write) operacji i tych, które nie są wykonywane w jednym kroku potrzebujemy sprzętowe wsparcie wykonać atomowo; wśród nich przyrosty i dekrementy, fetch_and_add, itd.

Dla niektórych architektur (w tym I386, AMD_64 i IA64) gcc ma wbudowaną obsługę dostępu do pamięci atomowej, dlatego nie jest wymagane zewnętrzne libra. Here możesz przeczytać informacje o API.

3

Funkcje Apache Portable Runtime są bardzo zbliżone do funkcji Win32 InterlockedXXX.

1

Możesz wstawić jakiś kod zespołu w swoim źródle, aby korzystać bezpośrednio z instrukcji blokowanych x68.

Należy użyć operacji blokady xadd .

Zobacz na przykład this.

2

Dość powszechna biblioteka glib używana w programowaniu GTK i QT, jak również samodzielna, oferuje szereg operacji atomowych. Zobacz http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html dla listy. Istnieją funkcje g_atomic dla większości operacji obsługiwanych przez blokadę na systemie Win32, a także na platformach, na których sprzęt bezpośrednio je obsługuje, są one wstawiane jako wymagany kod zespołu.

Powiązane problemy