Re[42]: Безопасность Rust
От: · Великобритания  
Дата: 03.06.19 22:38
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>>Смогёшь?

V>·>Я ж уже тебе показывал, но чукча не читатель: https://godbolt.org/z/LLNDkD
V>Показать и доказать — разные вещи. ))
После очередной подмены тезис стал заключаться в том, что atomic<int>+relaxed и volatile sig_atomic_t — оба атомарны с т.з. многопоточности т.к. генерят одинаковый код. Я показал, что иногда генерится разный код. ЧТД.

Но ты снова подменяешь тезис какими-то конкретными имплементациями:

V>У тебя по ссылке swap, но чтение содержимого переменной не требовалось, там безусловная запись, поэтому, скорее всего, будет работать "can optimize away fetching the original value".

И что, что скорее всего? А иногда и нет. Типичный UB.

V>Итого, когда биты aq=0 и rl=0 у этих операций и чтение значения не требуется (см в твоём примере amoswap.w zero, ...), семантика происходящего не будет отличаться от простого sw.

Если implement AMOs at memory controllers. А если нет?

V>Вопрос: а почему же всё-таки AMO, а не sw?

V>Ответ там же в доке по AMO:

V>If the address is not naturally aligned, a misaligned address exception will be generated.

Ты хочешь сказать, что это единственная причина? Почему тогда сгенерился такой код? Ведь компилятор явно знает, что оно aligned.

В любом случае, даже если risc и все известные архитектуры будут атомик по самые гланды, это не меняет того факта, что по стандарту _языка_ ни int, ни даже volatile int не являются atomic.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.