Информация об изменениях

Сообщение Re[3]: Многопоточность от 21.12.2020 19:02

Изменено 21.12.2020 20:09 vlp

Re[3]: Многопоточность
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, vlp, Вы писали:


vlp>>Здравствуйте, _NN_, Вы писали:

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

vlp>>Атомарная тут только запись, чтение теоретически может приводить к stale read и в этом случае не будет брошено исключение когда dispose вызван. Это в принципе нестрашно, т.к. в этом случае все равно код нормально работать уже не будет.

_NN>В каком смысле не страшно ?
В смысле, что если вы используете сокет после того, как его задиспоузили, код уже неверный и вопрос только в том, с какой одишклц он будет падать.

_NN>Вот я вызвал Dispose, и вызываю Receive в цикле.

_NN>Компилятор заинлайнил/процессор положил в кеш переменную и теперь Receive будет вызываться, а _disposed всегда будет 0.
_NN>Или так не может быть ?
Наверное, может.
Если сам сокет уже disposed, read упадет в другом месте, а не с сообщением "object disposed"
Re[3]: Многопоточность
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, vlp, Вы писали:


vlp>>Здравствуйте, _NN_, Вы писали:

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

vlp>>Атомарная тут только запись, чтение теоретически может приводить к stale read и в этом случае не будет брошено исключение когда dispose вызван. Это в принципе нестрашно, т.к. в этом случае все равно код нормально работать уже не будет.

_NN>В каком смысле не страшно ?
В смысле, что если вы используете сокет после того, как его задиспоузили, код уже неверный и вопрос только в том, с какой ошибкой он будет падать.

_NN>Вот я вызвал Dispose, и вызываю Receive в цикле.

_NN>Компилятор заинлайнил/процессор положил в кеш переменную и теперь Receive будет вызываться, а _disposed всегда будет 0.
_NN>Или так не может быть ?
Наверное, может.
Если сам сокет уже disposed, read упадет в другом месте, а не с сообщением "object disposed"