Интервал? ориентированный на многопотоковое исполнение?

Я знаю это в .NET все 32-разрядные типы (например, int, bool, и т.д.), ориентированы на многопотоковое исполнение. Таким образом, не будет частичной записи (согласно спецификациям).

Но, делает то же, запрашивают int? (nullable интервал)?

24
задан Sam 14 July 2014 в 14:47
поделиться

3 ответа

Вопрос плохо сформулирован, отсюда и путаница в ответах. Вопрос должен быть в следующем: «Являются ли операции чтения и записи в переменную типа int? Гарантированно атомарной

Нет, абсолютно нет. Спецификация предельно ясна по этому поводу:

Чтение и запись следующих типов данных являются атомарными: bool, char, byte, sbyte, short, ushort, uint, int, float и ссылочные типы. Кроме того, чтение и запись перечислимых типов с базовым типом в предыдущем списке также являются атомарными. Чтение и запись других типов, включая long, ulong, double и decimal, а также типы, определяемые пользователем, не гарантируют, что они будут атомарными.

Поток вполне может прочитать частично записанное значение из переменной совместно используемой памяти обнуляемого типа.

Например, предположим, что у вас есть int? переменная x, которая в настоящее время имеет значение null. Поэтому он содержит int, установленный в ноль, и bool, установленный в false. Теперь в другом потоке вы записываете обнуляемое int "5" в x. Для другого потока совершенно законно читать не обнуляемое int zero из x, потому что "true" в bool может быть установлено до того, как 5 будет установлено в int.

43
ответ дан 28 November 2019 в 22:51
поделиться

Нет, поскольку int? на самом деле является структурой (Nullable), состоящей из int и bool.

12
ответ дан 28 November 2019 в 22:51
поделиться

Из http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx :

Любые общедоступные статические (общие в Visual Basic) члены этого типа являются потокобезопасными. Любой Не гарантируется, что члены экземпляра будут потокобезопасными.

3
ответ дан 28 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: