Спецификация C # говорится в разделе 5.5, который читает и пишет для определенных типов (а именно bool
, char
, byte
, sbyte
, short
, ushort
, uint
, int
, float
и ссылочные типы) гарантированно будут атомарными.
Это пробудило во мне интерес. Как ты можешь это сделать? Я имею в виду, что мой личный опыт показал, что я могу блокировать переменные или использовать барьеры, только если я хочу, чтобы чтение и запись выглядели атомарно; это было бы убийством производительности, если бы это нужно было делать для каждого отдельного чтения / записи. И все же C # делает что-то с похожим эффектом.
Возможно, другие языки (например, Java) делают это. Я серьезно не знаю. Мой вопрос на самом деле не предназначен для конкретного языка, просто я знаю, что C # делает это.
Я понимаю, что он может иметь дело с определенными инструкциями процессора и может не использоваться в C / C ++. Однако я все еще хотел бы знать, как это работает.
[РЕДАКТИРОВАТЬ] Честно говоря, я считал, что чтение и запись могут быть неатомарными в определенных условиях, например, когда ЦП может получить доступ к области памяти, в то время как другой ЦП записывает туда. Это происходит только тогда, когда процессор не может обработать все объекты одновременно, например, потому что он слишком большой или память не выровнена по соответствующей границе?