У меня есть структура, содержащая два элемента данных:
struct A{
short b;
short c;
};
и вектор, содержащий многие из этих структурных объектов:
std::vector<A> vec;
во время выполнения элементы данных A.b
и A.c
из объектов структуры устанавливаются в ноль / значение x
. Однако b
и c
необходимо изменять одновременно - одно нельзя обновлять отдельно друг от друга. Я планировал использовать атомарный compare_exchange_weak()
для обновления.
Я не уверен, следует ли мне представлять каждую структуру как std::atomic<A>
в векторе, или я должен поместить объединение внутри структуры, чтобы объединить два коротких замыкания в один uint32_t
, а затем изменить это:
union A {
struct {
short b;
short c;
};
uint32_t d;
};
Какое было бы лучшее решение? Стоит ли хранить вектор:
std::vector<uint32_t>
и после доступа к каждому элементу переинтерпретируйте_приведение к A, чтобы получить d
?
Я хочу, чтобы блокировка была как можно менее навязчивой.
Переносимость не требуется, это будет для Linux, 64-разрядная версия, x86, компилятор GCC 4.8+
atomic_flag
. 02.12.2014std::array
. Если вы этого не сделаете,std::vector
в порядке, пока это число остается постоянным на протяжении всего времени существования вектора. В противном случае вам придется написать конструктор копирования или перемещения. 02.12.2014