Это звучит как отличный ответ.

с как у меня былспросил, но мой немного другой. Вопрос в том, почему ключевое слово volatile не разрешеноC# по типамSystem.Double а такжеSystem.Int64, и т.д.?"

На первый взгляд, я ответил своему коллеге: «Ну, на 32-битной машине эти типы требуют, по крайней мере, двух тактов, чтобы войти в процессор, а платформа .Net намерена абстрагировать детали, специфичные для процессора. " На что он отвечает: «Это ничего не абстрагирует, если мешает использовать функцию из-за проблем, связанных с процессором!»

Он подразумевает, что специфичные для процессора детали не должны отображаться человеку, использующему фреймворк, который «абстрагирует» такие детали от программиста. Таким образом, фреймворк (или C #) должен абстрагировать их и делать то, что нужно, чтобы предлагать те же гарантии дляSystem.Doubleи т. д. (будь то семафор, барьер памяти или что-то еще). Я утверждал, что фреймворк не должен добавлять накладные расходы семафора наvolatileпотому что программист не ожидает таких издержек с таким ключевым словом, потому что семафор не нужен для 32-битных типов. Большие издержки для 64-битных типов могут стать неожиданностью, поэтому лучше .NET Framework просто не разрешать это, и заставлять вас создавать свой собственный семафор для больших типов, если накладные расходы приемлемы.

Это привело к нашему исследованию того, что такое ключевое слово volatile. (видетьэто страница). На этой странице указано в примечаниях:

В C # использование модификатора volatile в поле гарантирует, что при любом доступе к этому полю используется VolatileRead или VolatileWrite.

Хммм .....VolatileRead а такжеVolatileWrite оба поддерживают наши 64-битные типы !! Мой вопрос, то есть

«Почему ключевое слово volatile не разрешено вC# по типамSystem.Double а такжеSystem.Int64, и т.д.?"

Ответы на вопрос(4)

Ваш ответ на вопрос