Такой же вопрос, как мой, был задан , но мой вопрос немного другой. Вопрос в том, " фреймворк (или C #) должен абстрагироваться от них и делать то, что необходимо, чтобы предлагать те же гарантии для System.Double
и т. д. (будь то семафор, барьер памяти или что-то еще). Я утверждал, что фреймворк не должен добавлять накладные расходы семафора на volatile
, потому что программист не ожидает таких накладных расходов с таким ключевым словом, потому что семафор не требуется для 32-битных типов . Большие накладные расходы для 64-битных типов могут стать неожиданностью, поэтому лучше, если инфраструктура .Net просто не допускает этого и заставит вас делать свой собственный семафор для более крупных типов, если накладные расходы приемлемы.
Это привело к к нашему исследованию, что такое ключевое слово volatile. (см. на этой странице). На этой странице в примечаниях говорится:
В C #, использование модификатора volatile в поле гарантирует, что весь доступ к этому полю использует VolatileRead или VolatileWrite.
Хммм ..... VolatileRead
и VolatileWrite
оба поддерживают наши 64-битные типы !! Тогда мой вопрос:
«Почему ключевое слово volatile не разрешено в
C #
для типовSystem.Double
иSystem.Int64
и т. Д. ? "