@KislyFan
инженер, связист и просто любитель выпить

Блокировать ли tcpclient.stream?

Есть tcpclient от него получен stream. Есть два threads читающий и пишущий из stream. Нужно ли блокировать stream ?
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
Алгоритм получения ответа на ваш вопрос, которым я воспользовался и также советую вам:
1. Идем смотрим какой тип стрима возвращает TcpClient.GetStream(). Тип стрима - NetworkStream.
2. Переходим по ссылке на NetworkStream и спускаемся к секции Thread Safety - она есть у всех классов, это стандартный элемент документации. Там написано:
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Т.е. сказано, что потокобезопасными являются только статические методы. Эта фраза встречается у большинства классов, т.к. большинство не проектировались специально для многопоточной работы. Вот concurrent-коллекции - это другое дело, у них так и написано (очередь):
All public and protected members of ConcurrentQueue are thread-safe and may be used concurrently from multiple threads.
Что логично, т.к. в межпотоковых блокировках весь смысл этой очереди, в отличие от обычной.
Учтите, что тот факт что только одним потоком вы читаете, а другим пишете, вовсе не значит, что они не будут мешать друг-другу. Например, и чтение и запись могут менять какие-либо внутренние указатели и индексы (номер текущего байта или сколько еще непрочитанных байт осталось), о которых вы и знать не можете. Поэтому всегда идем в документацию и проверяем, что там.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы