Size: a a a

2020 November 13

I

Ioann_V in pro.cxx
Andrei K
Там будут фенсы стоять. А если спинлок самописный типа volatile int, то он конечно не сработает.
Так погоди, у меня ОС спин лок, да
источник

I

Ioann_V in pro.cxx
Там скорее всего сделано на КАС
источник

I

Ioann_V in pro.cxx
но этот кас, разве влияет на то что мы внутри блокировки меняем?
источник

AK

Andrei K in pro.cxx
Ioann_V
Так погоди, у меня ОС спин лок, да
В чём баг заключается тогда?
источник

AK

Andrei K in pro.cxx
Если ты что-то под спинлоком пишешь, а потом под спинлоком читаешь, то гарантируется видимость.
источник

АК

Александр Караев... in pro.cxx
Danya
Егору вроде требовалось только размер констэкспровый
если передаётся литерал, то можно сразу template <std::size_t N> void f(const (&s)[N]), без fixed_string
а у него передаётся std::string_view, который возможно constexpr, а возможно и нет
источник

D

Danya in pro.cxx
Александр Караев
если передаётся литерал, то можно сразу template <std::size_t N> void f(const (&s)[N]), без fixed_string
а у него передаётся std::string_view, который возможно constexpr, а возможно и нет
Ну да
Поэтому я и привёл решение изначальное для литералов только
источник

AK

Andrei K in pro.cxx
Andrei K
Если ты что-то под спинлоком пишешь, а потом под спинлоком читаешь, то гарантируется видимость.
Если только что-то сильно не так не делать.
источник

D

Danya in pro.cxx
Danya
Ну да
Поэтому я и привёл решение изначальное для литералов только
Если ими ограничивается, то это можно решить без макросов, что уже хорошо
источник

АК

Александр Караев... in pro.cxx
Danya
Ну да
Поэтому я и привёл решение изначальное для литералов только
теперь вижу, я пропустил ссылку на твоё решение
источник

I

Ioann_V in pro.cxx
Andrei K
В чём баг заключается тогда?
Баг такой, что я читаю значение из структуры данных - атомарной, затем начинаю работать с этими данными(внутри данных как раз храню спин) вешая спин лок на них, и у меня получается, что уже внутри, блокировки работая с этими данными у меня значения не те, грубо говоря, псевдокод:
volatile * elem get_elem(atomary_data_structure);
elem->spin.lock();

работаю с данными elem
elem->counter++
....
elem->spinunlock();
источник

I

Ioann_V in pro.cxx
и вот новые потоки не видят допустим верное значение счетчика
источник

I

Ioann_V in pro.cxx
это из за того, что я данные получаю до спин блокировкки?
источник

I

Ioann_V in pro.cxx
но они все - волатильные ж
источник

AK

Andrei K in pro.cxx
Ioann_V
это из за того, что я данные получаю до спин блокировкки?
+
источник

I

Ioann_V in pro.cxx
будут перечитываться из паяымти внутри лока
источник

AK

Andrei K in pro.cxx
Ioann_V
но они все - волатильные ж
Это слово не так работает как о нём пишут в старых маруалах. volatile никакого отношения к многопоточке уже не имеет.
источник

I

Ioann_V in pro.cxx
как можно поправить этот баг? Использовать внутри спин блокировки атомарные операции?
источник

I

Ioann_V in pro.cxx
скажем не counter++, а atomic_inc(counter)
источник

I

Ioann_V in pro.cxx
это поможет?
источник