Здравствуйте, alex_public, Вы писали:
_>·>Ок, ты в очередной раз подменяешь тезис. Но пусть кривая. В любом случае, она ничему не противоречит и имеет право на жизнь. Возможно лишь ухудшает перформанс. _>·>И уж тем более это никак не доказывает, что volatile sig_atomic можно использовать в многопоточке. Доказательством будет фраза в стандарте. А стандарт наоборот это явно запрещает. _>1. Я не пытаюсь что-то доказать, т.к. факт атомарности записи регистра в память общеизвестен (мне вообще странно, что ты начал об этом спорить).
Факт в том, что обычно платформы реализуют это именно так. Но это ни к чему не обязывает. Мало того, этот факт не имеет никакого отношения к С/С++.
_>2. Что-то доказать пытаешься тут ты, причём весьма странным способом — пытаясь найти реализацию std::atomic, в которой операция записи реализовывалась бы не через стандартные инструкции записи. Хотя очевидно, что даже если бы ты вдруг такое и нашёл, это не стало бы доказательство неатомарности обычных инструкций.
Я просто повёлся.
_>3. Стандарт вообще ничего не запрещает. )))
Он называет это undefined behaviour.
_>4 (главное — надеюсь хотя сейчас до тебя это дойдёт). Когда ты где-то видишь фразу типа того что атомарность sig_atomic (читай int'а) является достаточной для сигналов, но недостаточной для потоков, то это идёт речь об атомарности в широком смысле (включая гарантии отсутствия переупорядочивания инструкций, который даёт std::atomic с дефолтными настройками). Если же говорить об атомарности в чистом виде (именно в таком мы её и обсуждали, причём по именно твоему определению), то никакой разницы между сигналами, потоками или чем-то ещё просто нет. Ну и да, sig_atomic + вызов atomic_thread_fence(memory_order_seq_cst) при каждом обращение даст тебе атомарность даже в широком смысле (и для сигналов и для потоков), но это к теме нашей дискуссии уже не относится.
Напоминаю. Разговор начался с твоего кода присвоения "int global_var" и мой тезис был с "Если это же сделать многопоточным, т.е. эту global_var будут пытаться писать одновременно разные потоки без всякой синхронизации, то возможен data race и значение global_var может быть каким угодно."
Потом ты начал подменять тезис, изменяя int на sig_atomic, потом ещё volatile, потом маш-коды, теперь ты наконец-то дошел до atomic_thread_fence. Похоже, ты во всём разобрался. Можно сворачивать разговор.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай