Я знаю это в .NET все 32-разрядные типы (например, int
, bool
, и т.д.), ориентированы на многопотоковое исполнение. Таким образом, не будет частичной записи (согласно спецификациям).
Но, делает то же, запрашивают int?
(nullable интервал)?
Вопрос плохо сформулирован, отсюда и путаница в ответах. Вопрос должен быть в следующем: «Являются ли операции чтения и записи в переменную типа 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.
Нет, поскольку int?
на самом деле является структурой (Nullable
), состоящей из int
и bool
.
Из http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx :
Любые общедоступные статические (общие в Visual Basic) члены этого типа являются потокобезопасными. Любой Не гарантируется, что члены экземпляра будут потокобезопасными.