Сообщение 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"
_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"
_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"