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