Здравствуйте, vdimas, Вы писали:
V>·>После очередной подмены тезис стал заключаться в том, что atomic<int>+relaxed и volatile sig_atomic_t — оба атомарны с т.з. многопоточности т.к. генерят одинаковый код. Я показал, что иногда генерится разный код. ЧТД. V>Не-не-не, Дэвид Блэйн, вы показывали Алексу, что в одном случае атомарность, а в другом нет.
Нет, Алекс пытался доказать что sig_atomic_t атомарен с т.з. многопоточности на том основании, что генерится одинаковый код. Это у него заняло несколько попыток. Последний результат — он назвал текущую имплементацию в gcc бажной. Но это всё мягко говоря не в тему, т.к. это всё равно не докажет многопоточную атомарность, ибо даже если посмотреть на доку по atomic_signal_fence, то ассемблерный код ничего не подтверждает, ибо "This is equivalent to std::atomic_thread_fence, except no CPU instructions for memory ordering are issued".
V>Тем самым ты и Сайберикс показали, что не понимаете, что есть атомарность, путаете её с упорядочиванием/синхронизацией.
Это ты путаешь. Нет такого понятия "нет упорядоченности", а есть order_relaxed.
V>А я лишь утверждал о требовании записи значения в память в одну инструкцию из-за работы в условиях прерываний.
Это я как раз и упомянул первым. Ты же совершенно необоснованно пытаешься это натянуть на многопоточность. Хотя стандарт явно разделяет эти понятия. Посмотри хотя бы на наличие atomic_signal_fence и atomic_thread_fence.
V>·>В любом случае, даже если risc и все известные архитектуры будут атомик по самые гланды, это не меняет того факта, что по стандарту _языка_ ни int, ни даже volatile int не являются atomic. V>По стандарту sig_atomic_t в любом случае будет atomic.
Не в контексте многопоточки, т.к. такое его использование — data race, а значит ub. Использование std::atomic не является data race.
V>Симметричная мякотка в том, что в многопроцессорной системе обработчик прерывания может быть вызыван из другого потока (из основного), а не из того, в котором ты осуществляешь оперироавние с переменной типа sig_atomic_t.
Верно. Но это обработчик сигнала будет вызван снаружи. А тред должен дёргать signal(). В этом случае сработают соответсвующие механизмы atomic.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай