Является ли System.ServiceModel.Channels.BufferManager поточно-ориентированным?

Я создаю менеджер буфера через статический член BufferManager.CreateBufferManager, Этот новый созданный BufferManager используется несколькими потоками.

Должен ли я использовать lock с TakeBuffer() а также ReturnBuffer() или это поточно-ориентированный дизайн?

2 ответа

Решение

Внутренне BufferManager.CreateBufferManager возвращает экземпляр WrappingBufferManager который не использует никакой формы управления параллелизмом, но включает в себя несколько экземпляров SynchronizedPool<T> которые используют внутреннюю блокировку, когда Take()новый буфер. Так что судя по простоте WrappingBufferManagerМожно с уверенностью предположить, что любая блокировка с вашей стороны была бы избыточной, а возвращаемый класс фактически безопасен для потоков.

У меня возникли проблемы с потоками в BufferManager. Я создал собственный кодировщик сообщений в WCF, и, исходя из моих наблюдений, не всегда гарантируется, что менеджер буфера создается для каждого вызова. Поэтому байты повторно используются / возвращаются другими потоками, что портит мои данные.

Итак, чтобы ответить на ваш вопрос... Нет, они НЕ. Поскольку вы повторно используете один и тот же экземпляр, они не гарантируют поточно-ориентированный.

Другие вопросы по тегам