мы пишем в нее с одного треда простыми сторами
Теперь задача прочесть ее с другого треда без УБ причем увидев последнее значение в MO
В бложиках всякого рода говорят ну прост раз она тредлокал то писать в нее со своего треда можно без синхронизации и т.п. А когда читаешь типа нужен какой-то барье, в общем такая ересь
Но я предлагаю тут "рабочую" схему: мы заводим еще один флаг, после окончания всех записей с первого треда мы делаем Release стор в этот флаг, а в читающем треде спинимся по этому флагу в надежде увидеть этот самый Release и как следствие все сторы в первоначальную int переменную
Так будет работать? Может ли MM гарантировать что мы увидим вожделенный Release? Я переизобрел кандовый спинлок?
Почему спрашиваю.. Java MM например гарантирует что мы можем НЕ увидеть, так как JIT вполне может соптимизировать не-volatile сторы в шаред локацию в NOOP
Тред-локал переменная в каждом треде своя. Нельзя прочитать значение, которое туда записал другой тред. Вы, судя по всему, путаете тред локал с атомиком.
адрес тредлокал переменной можно брать из любого треда
Если вы делаете в переменную только сторы, то atomic c memory_order_relaxed на x86 превратится в ассемблере обычную запись без доп синхронизаций. Проблема в том, что другие потоки увидят значение с ощутимым запозданием
Родной, как думаешь, почему переменная называется thread local? Локальная для потока?
Это же не запрещает работу с такими переменными из других потоков. Переменная как переменная.
Так а ЗАЧЕМ? Что мешает использовать обычную переменную?
Вот именно в этом мой поинт
Ну бывает нужно. Те же hazard pointers например.
> Так будет работать? С обычной переменной точно да(бтв ничто не мешает завести массив обычных переменных и писать туда по индексу треда Насчет тредлокал не уверен мб в стандарте есть какой нибудь параноидальный пункт что это уб > Может ли MM гарантировать что мы увидим вожделенный Release? Да гарантирует. Что в acquire лоаде вы увидете release > Я переизобрел кандовый спинлок? Да.
Постоянно забываю, что это за ругательство, можно вкратце пояснить?
Один из способов безопасного memory reclamation в lock free. Вот Хижинский описывал: https://habr.com/ru/post/202190/
Обсуждают сегодня