Это законно - так как в ОС вам это не помешает.
Но умно ли это? Нет, у вас должен быть какой-то тип синхронизации.
Там не было бы "искалеченных битов на проводе". Они будут выходить как единицами или нулями. Но нечего сказать, что все ваши биты будут записаны до того, как другой процесс попытается их прочитать. И нет НИКАКИХ гарантий относительно того, как быстро они будут написаны, и как быстро они будут прочитаны.
Вы всегда должны предполагать, что нет абсолютно НИКАКОЙ связи между действиями 2 процессов (или потоков в этом отношении).
Аппаратная блокировка шины уровня не происходит, если вы не понимаете это правильно. Может быть сложнее, чем ожидалось, заставить ваш компилятор / библиотеку / os / cpu сделать это правильно. Примитивы синхронизации написаны, чтобы убедиться, что это происходит правильно.
Блокировка сделает его безопасным, и это не так сложно сделать. Так что просто сделай это.
@ unknown - Вопрос несколько изменился с момента опубликования моего ответа. Однако описанное вами поведение явно зависит от платформы (аппаратного обеспечения, операционной системы, библиотеки и компилятора).
Не давая конкретных инструкций компилятору, вы на самом деле не гарантированно записали 32 бита за один кадр. Представьте себе ситуацию, когда 32-битное слово не выровнено по границе слова. Этот невыровненный доступ допустим для x86, а в случае x68 доступ превращается в серию выровненных обращений процессором.
Между этими операциями может произойти прерывание. Если переключение контекста происходит в середине, некоторые биты записаны, некоторые нет. Взрыв, ты мертв.
Также давайте подумаем о 16-битном или 64-битном процессоре. Оба они по-прежнему популярны и не обязательно работают так, как вы думаете.
Итак, на самом деле вы можете столкнуться с ситуацией, когда «какой-то другой процессор выбирает значение слова размером 1/2, записанное в». Вы пишете свой код так, как будто ожидается, что этот тип вещей произойдет, если вы не используете синхронизацию.
Теперь есть способы предварительно записать ваши записи, чтобы убедиться, что вы записали целое слово. Эти методы подпадают под категорию синхронизации, и создание примитивов синхронизации - это то, что лучше всего оставить разработчикам библиотек, компиляторов, ОС и аппаратного обеспечения. Особенно, если вы заинтересованы в переносимости (которой вы должны быть, даже если вы никогда не переносите свой код)