Szukasz przenośnego, prostego i eleganckiego zamiennika dla Win32 InterlockedExchangePointer. Najlepiej przy użyciu tylko C++ 11, ale również doładowanie.Czy istnieje zamiennik C++ 11 (lub boost) zamiennik dla InterlockedExchangePointer?
Odpowiedz
Funkcja standard atomic types ma funkcję atomową exchange
. Więc Microsoftese
PVOID volatile target;
old_value = InterlockedExchangePointer(&target, new_value);
staną
std::atomic<T*> target;
old_value = target.exchange(new_value);
Czy atomowa generuje pełną barierę pamięci? więc operacje na wskaźniku występujące w innych wątkach są bezpieczne? I jak mam pracować z shared_ptr? std :: shared_ptr
@kreuzerkrieg: Jedno pytanie na pytanie proszę. Domyślnie istnieje pełna bariera pamięci, ale można określić inne kolejność pamięci w drugim parametrze. Współdzielone wskaźniki nie zapewniają operacji wymiany atomowej, trzeba by było zrobić coś innego (albo za pomocą oddzielnego surowego wskaźnika atomowego, albo muteksu). –
Spójrz, co znalazłem http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic wygląda na wymianę atomową dla współdzielonych wskaźników – kreuzerkrieg
- 1. Czy istnieje oficjalny zamiennik CodeDom?
- 2. Czy istnieje zamiennik dla unistd.h dla systemu Windows (Visual C)?
- 3. Zamiennik dla SimpleCursorAdapter?
- 4. Zamiennik dla przestarzałego słowa kluczowego rejestru C++ 11
- 5. Zamiennik dla przestarzałego `WrappingNeoServerBootstrapper`
- 6. zamiennik php dla safe_mode
- 7. C++ zamiennik std :: array
- 8. Czy jest zamiennik mdbtools?
- 9. . Zamiennik rdzenia .NET dla TcpClient
- 10. Notepad ++ zamiennik
- 11. Idiomatyczny zamiennik dla typów egzystencjalnych
- 12. Zamiennik dla <center>
- 13. Zamiennik dla sizeWithFont: ForWidth: lineBreakMode:
- 14. Sqlite jako zamiennik dla fopen()?
- 15. Zamiennik GoogleDoc dla Excela = DATEDIF()?
- 16. Uniwersalny zamiennik createPopup()?
- 17. Zamiennik dla źródła w sh
- 18. Zamiennik dla gluPerspektywa (z glFrustrum)
- 19. Zamiennik dla MS vsprintf_s na Linux?
- 20. przechwytywania ciąg zamiennik regex
- 21. Zamiennik dla równoległego plyr z doMC
- 22. Czy libdmtx jest martwy, sugerowany zamiennik?
- 23. Python 3 zamiennik PyFile_AsFile
- 24. Zamiennik dla System.Web.HttpUtility.UrlEncode/UrlDecode ASP.NET 5
- 25. Zamiennik przypadku w Vim
- 26. Zamiennik mostu JDBC-ODBC
- 27. Continuum jako zamiennik Jenkins?
- 28. Swift Playgrounds: zamiennik dla captureValue (_: withIdentifier :)
- 29. Zamiennik przestarzałego DefaultHttpClient
- 30. Czy istnieje zamiennik dla MEF w .NET Core (lub ASP.NET 5)?
[std :: atomowy] (http://en.cppreference.com/w/cpp/atomic/atomic) zapewnia funkcjonalność wymiany, ale to tylko działa, jeśli możesz zmienić typ swojej zmiennej na 'std :: atomic' –
melak47