Czy istnieje jakiś sens w tworzeniu obiektów atomowych z kwalifikatorem - lotny?Czy jest jakiś sens, aby std :: atomowe obiekty <> z kwalifikatorem - volatile?
Używaj:
volatile std::atomic<int> i(1);
zamiast:
std::atomic<int> i(1);
Czy istnieje jakiś sens w tworzeniu obiektów atomowych z kwalifikatorem - lotny?Czy jest jakiś sens, aby std :: atomowe obiekty <> z kwalifikatorem - volatile?
Używaj:
volatile std::atomic<int> i(1);
zamiast:
std::atomic<int> i(1);
Nie, nie ma absolutnie żadnego sensu w podejmowaniu std::atomic
także lotny, jak wewnątrz std::atomic
, kod będzie uporać się z możliwością, że zmienna może się zmienić w każdej chwili, i że inne procesory mogą wymagać „powiedział”, że uległo zmianie ("mówienie" innym procesorom nie jest objęte przez volatile
).
Jedyny czas, który naprawdę potrzebujesz: volatile
, jeśli masz wskaźnik do elementu sprzętu, który kontroluje Twój kod - na przykład odczytywanie licznika w zegarze lub który bufor ramki jest teraz aktywny lub powiadamianie o sieci karta do odczytu danych do następnego pakietu do wysłania. Takie rzeczy są niestabilne, ponieważ kompilator nie może wiedzieć, że wartość tych rzeczy może się zmienić w dowolnym momencie.
+1 Dobra odpowiedź. Zastanawiasz się, dlaczego istnieją "lotne" funkcje użytkownika 'std :: atomic
Zwykle nie ma sensu.
Użyj opcji atomic
, aby umożliwić modyfikowanie zmiennej w jednym wątku, podczas gdy inne wątki mogą uzyskiwać do niej dostęp bez jawnej synchronizacji.
Użyj volatile
, aby kontrolować dostęp do nietypowych lokalizacji pamięci (takich jak rejestry sprzętowe), gdzie każdy odczyt i zapis musi się odbywać w kolejności określonej przez program. Normalna zmienna, atomowa lub inna, zwykle nie wymaga takiej kontroli.
Te dwa pojęcia nie są ze sobą powiązane. W szczególności nie należy mylić volatile
ze słowem kluczowym używanym w innych językach, aby zmienne były atomowe. W C++, volatile
nie ma nic wspólnego z interakcjami wątków.
Twoje pierwsze zdanie jest intrygujące: kiedy _przypadku_ sensowne jest zadeklarowanie obiektu atomowego 'volatile'? Wydaje się, że jedynym rozsądnym zastosowaniem może być obiekt astronomiczny w nietypowym elemencie ... –
@ DietmarKühl: Można sobie wyobrazić sytuację, w której można by chcieć uzyskać wielowątkowy dostęp do rejestrów sprzętowych lub coś podobnego, a obie koncepcje mogą mieć sens. Niezwykłe, ale nie poza sferą możliwości. –
Tak właśnie myślałem, ale wątpię, czy byłby potrzebny do pracy! W końcu, każdy 'std :: atomic
[volatile vs. volatile] (http://www.drdobbs.com/parallel/volatile-vs- volatile/212701484). – IInspectable