Я работаю над портом C++ библиотеки Java. Одна из проблем - я не могу найти эквивалент Java AtomicLongArray. Кто-нибудь знает, есть ли что-то уже эквивалентное в C++ 11 или как реализовать аналогичную функциональность? Я взглянул на атомику C++ 11, но ничего не нашел.C++ 11 эквивалент java atomiclongarray
ответ
Документов для AtomicLongArray сказать:
Длинный массив, в котором элементы могут быть обновлены атомарно. См. Спецификацию пакета
java.util.concurrent.atomic
для описания свойств атомных переменных.
Это звучит для меня как простой массив std::atomic<long>
:
std::array<std::atomic<long>, N> array;
// or, if size is not known at compile time
std::vector<std::atomic<long>> vector(n);
Следует отметить, что только элементы являются неделимыми, сам контейнер не является, поэтому не обойдите push_back
ING в вектор ,
В [container.requirements.dataraces] стандарт говорит
-2- Несмотря (17.6.5.9), реализации требуется, чтобы избежать гонки данных, когда содержимое объекта, содержащегося в различных элементов в одна и та же последовательность, за исключением
vector<bool>
, изменяются одновременно.-3- [Примечание: Для
vector<int> x
с размером больше, чем один,x[1] = 5
и*x.begin() = 10
могут быть выполнены одновременно без гонки данных, но иx[0] = 5
*x.begin() = 10
выполнены одновременно может привести к гонке данных. В качестве исключения из общего правила дляvector<bool> y, y[0] = true
может участвовать гонка сy[1] = true
. -end примечание]
Таким образом, любой контейнер (кроме зла vector<bool>
) позволяет отдельные элементы будут обновляться без гонок данных. Чтобы гарантировать, что обновления одного элемента безопасны, используйте контейнер с атомными типами, например. std::vector<std::atomic<long>>
В прошлый раз, когда я проверил, у вас нет векторов атомных типов, поскольку у них нет конструкторов копирования. См. Http://stackoverflow.com/questions/12003024/error-with-copy-constructor-assignment-operator-for-a-class-which-has-stdatomi –
@SeanMcCauliff, это неправда, вы можете заявить, например. 'std :: vector
// Следующая программа создает более 500 строк сообщений об ошибках при компиляции с gcc 4.7.2. Является ли это нереализованной функцией в gcc? #include
- 1. Что такое эквивалент C++ 11 экземпляра Java
- 2. Эквивалент счетчиков в C++ 11?
- 3. C# эквивалент DataOutputStream Java?
- 4. C++ 11 char16_t strstr и sprintf эквивалент
- 5. Эквивалент WAIT_ABANDONED в потоке C++ 11
- 6. C++ 11-й эквивалент Boost has_dereference
- 7. C++ 11 эквивалент функции all() Python
- 8. C++ 11 эквивалент Haskell в "inits"
- 9. эквивалент класса Java Java C++
- 10. Java-эквивалент C# DESCrypto
- 11. C++ эквивалент Java System.arraycopy
- 12. C# эквивалент Java Thread.setDefaultUncaughtExceptionHandler()?
- 13. Java-эквивалент cin (C++)
- 14. Java-эквивалент типа C#?
- 15. C# эквивалент Character.digit Java
- 16. C# Эквивалент Java IdentityHashMap
- 17. C# Эквивалент Java Runtime.getRuntime.exec()
- 18. C-эквивалент Java Float.intBitsToFloat
- 19. Java-эквивалент C++ sf_readf_double()
- 20. Java эквивалент C# Action.BeginInvoke
- 21. Java-эквивалент C# 'Enumerable.Any'
- 22. C++ эквивалент java StringBuilder.replace
- 23. C++ эквивалент Java Enum.valueOf()
- 24. Java эквивалент AttributeUsage C#
- 25. аннотации Java C# эквивалент
- 26. Java-эквивалент C# Console.ReadLine();
- 27. Java-эквивалент кода C
- 28. Java-эквивалент C# system.beep?
- 29. Java эквивалент C# Array.Copy
- 30. C# эквивалент Java Class.this
Вы бы значительно увеличили свою потенциально полезную аудиторию, если бы объяснили, что такое атомный туннель. Таким образом, вы получите помощь от людей, которые знают C++, но не Java. –