relaxed обеспечивает только видимость изменений
https://en.cppreference.com/w/c/atomic/memory_orde...
Объяснение к memory_order_relaxed
В методе producer_maybe_push() нужно синхронизировать данные только после записи
Что здесь обозначено словом "синхронизировать"?
Тем или иным способом сделать видимыми данные для других потоков после записи (и перед чтением).
Если ошибок нет, то, вероятно, очередь работает правильно.
relaxed обеспечивает только видимость изменений самой атомарной переменной в других потоках.
В методе producer_maybe_push() нужно синхронизировать данные только после записи
Сделайте тест и погоняйте его несколько часов с разным количеством узлов.
The value of an atomic object M, as determined by evaluation B, is the value stored by some unspecified side effect A that modifies M, where B does not happen before A.
producer_maybe_push()
нет никакого упорядочивания доступа к head
вообще, поэтому если в ходе выполнения потока в котором вызывается producer_maybe_push()
нет никаких других барьеров, то в качестве A нельзя будет найти никакой побочный эффект меняющий head
. почему ошибка указывает на конструктор, а не на arr?
как мне создать пространство для массива (не выделяя дин память) и не создавать по умолчанию их?
Я ведь нигде ничего по умолчанию не создаю.
он указывает на массив: type arr[N];
static_array
. Т.к. в моей esp32s3 всего 8мб озу и нет виртуальной памяти
Вот как раз бы понять что на что указывает
int *ptr = (int*) (matrix + XMAX);
for (int i = 0; i < XMAX; i++) {
matrix[i] = ptr + YMAX * i;
}
matrix
-- это указатели на строки массива, это пространство зарезервировано при вычислении указателя ptr
, который указывает на данные первой строки. Именно об этом я и написал, что вам нужен не только код, но и рутоничат, а ещё стрим, из которого рутоничат будет получать данные.
Посмотреть в device tree, что за таймер определён, включить для него драйвер?