Pełne specjalizacje std :: atomic dla typów integralnych udostępniają operatory przypisania arytmetycznego złożone, takie jak +=
, -=
, ale nie ma *=
lub /=
. Standard mówi o tym, ale o ile widzę, nie ma powodu. Czy ktoś, kto zna się na uzasadnieniu sekcji Atomic Operations Library, rzucił nieco światła na to?Dlaczego specjalizacja std :: atomic <integral> nie zapewnia operatorom mnożenia i dzielenia?
7
A
Odpowiedz
9
Myślę, że jest to związane ze sprzętem. Wiele platform ma atomikę do obsługi +=
, ale nie znam żadnej z nich, która oferuje *=
. Wdrożenie tego poprzez blokowanie byłoby proste, ale interfejs std::atomic
zmieszałby się na tym samym poziomie operacji, które są tanie w przypadku bardzo kosztownych operacji.
Powiązane problemy
- 1. Kolejność pierwszeństwa mnożenia i dzielenia
- 2. Jak wprowadzić symbol mnożenia i dzielenia w html?
- 3. Przeciążenia operatorów statycznych i użytkowników: std :: operator << i std :: ostream :: operator <<
- 4. Czy std :: atomic kasuje przyrosty z dekrementami?
- 5. Czy std :: atomic powinien być lotny?
- 6. std :: atomic z niestandardową klasą (C++ 11)
- 7. Jak elegancko zainicjować tablicę std :: atomic?
- 8. Czy std :: atomic :: operator ++ naprawdę zwraca wartość?
- 9. Czy std :: atomic <int*> :: load powinien wykonywać pętlę porównywania i zamiany?
- 10. Szablon alias i specjalizacja
- 11. std :: atomowy <std :: chrono :: high_resolution_clock :: time_point> nie można skompilować
- 12. Dlaczego jQuery nie zapewnia metody .firstChild?
- 13. Częściowa specjalizacja szablonu i ICC
- 14. jak używać std :: atomowej <>
- 15. Dlaczego nie mogę użyć operatora <on 'std :: deque'?
- 16. Dlaczego std :: packaged_task <void()> nie jest prawidłowy?
- 17. Dlaczego nie std :: sort używać mojego operatora <realizacji
- 18. Dlaczego std :: array < T, 0 > nie jest pusty?
- 19. Dlaczego nie ma std :: protect?
- 20. Czy jest zagwarantowane, że sizeof (std :: atomic <typ integer>) == sizeof (typ integer)?
- 21. Czy specjalizacja szablonów wymaga szablonu <>?
- 22. Przestrzenie wokół operatorów mnożenia i dzielenia są usuwane przez IDE, jak je zachować?
- 23. std :: vector: nie można wiązać 'std :: ostream aka {std :: basic_ostream <char>}' lwartość do 'std :: basic_ostream <char> &&'
- 24. Specjalizacja szablonów funkcji nie powiodła się?
- 25. Dlaczego std :: sub_match <T> publicznie dziedziczy ze std :: pair <T, T>?
- 26. Dlaczego mogę używać const char * jako klucz w std :: map <std :: string, int>
- 27. C++ 0x | Dlaczego std :: atomic przeciąża każdą metodę za pomocą volatile-qualifier?
- 28. Dlaczego typy Rusta `Atomic *` używają niemodulujących funkcji do mutowania wartości?
- 29. Dlaczego std :: swap nie działa z zawartością std :: bitset <n>?
- 30. Dlaczego nie ma std :: stou?
To było moje podejrzenie. Sądzę, że dlatego są bitowe operatory AND, OR i XOR, ale nie są one przesuwane. – juanchopanza