W aplikacji C++ Linux, jaki jest najprostszy sposób na uzyskanie funkcjonalności funkcji Interlocked w systemie Win32? W szczególności, lekki sposób na atomowe inkrementowanie lub dodawanie liczb całkowitych 32- lub 64-bitowych?Interlocked odpowiednik w systemie Linux
Odpowiedz
Po dokładnym przeglądzie, this wygląda obiecująco. Przerwa w stosie Yay.
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:)
Ś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.
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.
Funkcje Apache Portable Runtime są bardzo zbliżone do funkcji Win32 InterlockedXXX.
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.
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.
- 1. Windows Command Line Odpowiednik "czasu" w systemie Linux?
- 2. HeapCreate, HeapAlloc w systemie Linux, prywatny przydział dla systemu Linux
- 3. C# Interlocked Exchange
- 4. Odpowiednik Linux Mono usługi .NET Windows
- 5. Okna Beep() odpowiednik dla systemu Linux
- 6. Strptime() odpowiednik w systemie Windows?
- 7. Profilowanie wydajności w systemie Linux
- 8. Błędy Tomcat w systemie Linux
- 9. Programowanie kamery w systemie Linux
- 10. Dystrybucja oprogramowania w systemie Linux?
- 11. Co jest odpowiednikiem systemu Linux mkdir -p w systemie Windows?
- 12. Słabe aliasy symboli w systemie OS X są podobne do aliasów w systemie Linux lub najbliższy odpowiednik?
- 13. Przenoszenie plików w systemie Linux w C
- 14. Odpowiednik getch Windows() na awarie Mac/Linux
- 15. Android: odpowiednik UIActionSheet w systemie iOS
- 16. Python: signal.pause() odpowiednik w systemie Windows
- 17. Jaki jest odpowiednik ActionSheetIOS w systemie Android?
- 18. Odpowiednik Dependency Walker dla systemu Linux?
- 19. Rozwój ARM na systemie Linux
- 20. Obsługa sygnałów Erlanga w systemie Linux
- 21. Jak skompilować bibliotekę statyczną w systemie Linux?
- 22. Jak złapać błąd segmentacji w systemie Linux?
- 23. monitorować wykorzystanie pamięci programu w systemie Linux
- 24. Wątki/Porównanie procesów w systemie Linux/Windows
- 25. Automatyzacja komunikacji portu szeregowego w systemie Linux
- 26. Java Nie znaleziono w systemie Linux
- 27. wyszukiwanie nazwy ścieżki w systemie Linux?
- 28. Jak wywołać "cpuid" w systemie Linux?
- 29. Usługa WCF w systemie Linux z Apache2
- 30. Wykonywanie programów OpenGL w systemie Linux
Proszę nie pisać odpowiedzi tylko link. Kluczowe informacje powinny znaleźć się w odpowiedzi. Uzupełnij to linkiem za wszelką cenę. –