Size: a a a

2020 June 22

S

Serg in pro.cxx
ага, но это не atomic
источник

m

magras in pro.cxx
Serg
ну вот я только что проверил:
volatile int x;

void Foo() {
 ++x;
}

на Asm получилось:

  push  ebp
 mov  ebp, esp
; Line 4
 mov  eax, DWORD PTR ?x@@3HC      ; x
 add  eax, 1
 mov  DWORD PTR ?x@@3HC, eax      ; x
; Line 5
 pop  ebp
 ret  0
нету тут LOCK для atomic семантики
У atomic'ов тоже нет lock: https://godbolt.org/z/pX_tVv
источник

m

magras in pro.cxx
Пардон. -_-
источник

S

Serg in pro.cxx
да, потому что atomic требует вызова определенных функций, которые компилятор умеет встраивать
Сишный ++ к ним не отностися
источник

VS

Vlad Serebrennikov in pro.cxx
я был бы аккуратен с х86 на вашем месте
там есть некоторые гарантии насчет атомарных операций на уровне архитектуры
источник

ПК

Побитый Кирпич... in pro.cxx
Serg
ага, но это не atomic
Изначально я говорил именно про "msvc до сих пор какие то барьеры вставляет", имел ввиду именно хардварные
источник

VS

Vlad Serebrennikov in pro.cxx
Vlad Serebrennikov
я был бы аккуратен с х86 на вашем месте
там есть некоторые гарантии насчет атомарных операций на уровне архитектуры
в отличие от, скажем, арм
источник

OS

Oleksandr Senkovych in pro.cxx
volatile предполагает что компилятор не выбросит чтения и запись в переменную а так же не будет делать реордеринг инструкций вокруг volatile: все что пишется-читается до volatile не может быть перенесено в часть кода после volatile.
источник

m

magras in pro.cxx
Вообще интересно какой memory_order выставлен у операций на volatile переменных в msvc.
источник

S

Serg in pro.cxx
Побитый Кирпич
Изначально я говорил именно про "msvc до сих пор какие то барьеры вставляет", имел ввиду именно хардварные
если они хардварные - то msvc не при чем
источник

ПК

Побитый Кирпич... in pro.cxx
Serg
если они хардварные - то msvc не при чем
msvc их вставляет, всмысле не причем?
источник

AN

Alexander N in pro.cxx
volatile часто путают почему-то с потокобезопасным чем-то
источник

OS

Oleksandr Senkovych in pro.cxx
но есть еще реордеринг в cpu, поэтому часто нужно писать еще хардварным memory fencce
источник

m

magras in pro.cxx
Alexander N
volatile часто путают почему-то с потокобезопасным чем-то
Это ms specific расширение.
источник

S

Serg in pro.cxx
Побитый Кирпич
msvc их вставляет, всмысле не причем?
на x86 баръеры хардварные и самые строгие, поэтому не нужны дополнительные иструкция от компилятора
источник

AN

Alexander N in pro.cxx
Но это не так и это вообще странная штука, я даже не знаю когда оно применимо кроме embedded опять же
источник

ПК

Побитый Кирпич... in pro.cxx
Serg
на x86 баръеры хардварные и самые строгие, поэтому не нужны дополнительные иструкция от компилятора
Ну вот на ARM он вставляет доп. инструкции для процессора, хотя не должен
источник

OS

Oleksandr Senkovych in pro.cxx
Serg
на x86 баръеры хардварные и самые строгие, поэтому не нужны дополнительные иструкция от компилятора
это не совсем так. есть еще протокол когерентности кеша, и если у тебя нет mfence инструкции то некоторый код может поломаться из-за out-of-order выполнения на CPU
источник

S

Serg in pro.cxx
Побитый Кирпич
Ну вот на ARM он вставляет доп. инструкции для процессора, хотя не должен
скорее всего сделали чтобы переносился код который работал на x86
источник

AN

Alexander N in pro.cxx
magras
Это ms specific расширение.
Я так и понял. У них таких приколов много нестандартных
источник