System.ServiceModel.Channels.BufferManager是线程安全的吗?

8

我通过静态成员BufferManager.CreateBufferManager创建了一个缓冲区管理器。这个新创建的BufferManager被多个线程使用。

我应该在TakeBuffer()ReturnBuffer()中使用lock,还是它本身就是线程安全的?

2个回答

4

BufferManager.CreateBufferManager在内部返回WrappingBufferManager的实例,它不使用任何形式的并发控制,而是包装多个SynchronizedPool<T>的实例,在Take()新缓冲区时采用内部锁定。因此,根据WrappingBufferManager的简单性,可以安全地假设您的任何锁定都是多余的,并且返回的类实际上是线程安全的。


0

我在使用BufferManager时遇到了线程问题。我在WCF中创建了一个自定义的消息编码器,根据我的观察,不能保证每次调用都会创建缓冲管理器。因此,字节被其他线程重复使用/返回,从而破坏了我的数据。

所以,回答你的问题......不,它们不是。由于你正在重用同一实例,因此不能保证线程安全


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接