Почему не volatile в System.Double и System.Long?

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

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

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

Хммм ..... VolatileRead и VolatileWrite оба поддерживают наши 64-битные типы !! Тогда мой вопрос:

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

40
задан Community 23 May 2017 в 12:34
поделиться