Size: a a a

2020 June 22

ПК

Побитый Кирпич... in pro.cxx
Oleksandr Senkovych
И как можно писать барьер на ISO C?
Какой барьер?
источник

ПК

Побитый Кирпич... in pro.cxx
Oleksandr Senkovych
И как можно писать барьер на ISO C?
https://en.cppreference.com/w/c/atomic
Вон есть функционал для атомарных операций
источник

AT

Andrew Titov in pro.cxx
Побитый Кирпич
Какой барьер?
Примитив синхронизации, наверное.
источник

S

Serg in pro.cxx
atomic и барьеры для разных целей
источник

OS

Oleksandr Senkovych in pro.cxx
источник

ПК

Побитый Кирпич... in pro.cxx
И в чём проблема?
источник

OS

Oleksandr Senkovych in pro.cxx
Побитый Кирпич
И в чём проблема?
ни в чем. мне было интересно есть ли там такие примитивы. оказывается есть
источник

m

magras in pro.cxx
Теперь я совершенно не понимаю что происходит.

Вот цитата из описания ключа:

> /volatile:ms
> Selects Microsoft extended volatile semantics, which add memory ordering guarantees beyond the ISO-standard C++ language. Acquire/release semantics are guaranteed on volatile accesses.

Где здесь acquire/release семантика?
https://godbolt.org/z/izGsPr
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Теперь я совершенно не понимаю что происходит.

Вот цитата из описания ключа:

> /volatile:ms
> Selects Microsoft extended volatile semantics, which add memory ordering guarantees beyond the ISO-standard C++ language. Acquire/release semantics are guaranteed on volatile accesses.

Где здесь acquire/release семантика?
https://godbolt.org/z/izGsPr
Да, у меня получилось только на ARM-е барьеры получить
источник

S

Serg in pro.cxx
>Где здесь acquire/release семантика?
она аппаратная на x86 - в коде не видно
источник

ПК

Побитый Кирпич... in pro.cxx
Serg
>Где здесь acquire/release семантика?
она аппаратная на x86 - в коде не видно
Тогда зачем в msdn это упоминается? Или типа для других архитектур кроме ARM и x86?
источник

S

Serg in pro.cxx
Да , для других (кроме x86/64)
ARM бы я не исключал
источник

m

magras in pro.cxx
Serg
>Где здесь acquire/release семантика?
она аппаратная на x86 - в коде не видно
По моим представлениям четыре асемблерные инструкции не могут дать атомарный результат:

        mov     eax, DWORD PTR int volatile x                    ; x
       inc     eax
       mov     DWORD PTR int volatile x, eax                    ; x
       mov     ecx, DWORD PTR int volatile x                    ; x
источник

S

Serg in pro.cxx
magras
По моим представлениям четыре асемблерные инструкции не могут дать атомарный результат:

        mov     eax, DWORD PTR int volatile x                    ; x
       inc     eax
       mov     DWORD PTR int volatile x, eax                    ; x
       mov     ecx, DWORD PTR int volatile x                    ; x
именно , что не могут
acquire/release - это не эквивалент atomic
источник

ПК

Побитый Кирпич... in pro.cxx
Serg
Да , для других (кроме x86/64)
ARM бы я не исключал
для ARM там как раз в доке исключение, а других платформ кроме x86 и ARM для которых можно собирать с msvc я не знаю
источник

AS

Anatoly Shirokov in pro.cxx
Таблица беспредела процессоров
источник

S

Serg in pro.cxx
Побитый Кирпич
для ARM там как раз в доке исключение, а других платформ кроме x86 и ARM для которых можно собирать с msvc я не знаю
MIPS когда то поддерживался и всякие другие на CE
источник

AS

Anatoly Shirokov in pro.cxx
Anatoly Shirokov
Таблица беспредела процессоров
источник

ПК

Побитый Кирпич... in pro.cxx
Ты можешь объяснить конкретно почему на msdn сказано что volatile в msvc даёт aquire/release семантику, а по коду разницы никакой не видно?
источник

AS

Anatoly Shirokov in pro.cxx
Anatoly Shirokov
Таблица беспредела процессоров
таблица того, что может делать процессор, АRM может делать все что угодно, поэтому барьеры надо будет реализовывать
источник