Re: Многопоточность
От: VladCore  
Дата: 21.12.20 21:34
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Код Socket.cs имеет автомарную запись в Dispose:


_NN>
_NN>            // Make sure we're the first call to Dispose
_NN>            if (Interlocked.CompareExchange(ref _disposed, 1, 0) == 1)
_NN>            {
_NN>                return;
_NN>            }

_NN>


_NN>Но само чтение _disposed происходит не автомарно


_NN>

_NN>        private int _disposed; // 0 == false, anything else == true

_NN>        internal bool Disposed => _disposed != 0;

_NN>        private void ThrowIfDisposed()
_NN>        {
_NN>            if (Disposed)
_NN>            {
_NN>                ThrowObjectDisposedException();
_NN>            }
_NN>        }
_NN>


_NN>Гарантируется ли в C# работоспособность этого кода ?

_NN>Не нужен ли где-нибудь volatile, Volatile.Read или Interlocked.Read ?

Прикольная задачка. Дело думаю в том что Disposed может переключится из false в true а обратно — нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.