System.ServiceModel.Channels.BufferManager线程安全吗
本文关键字:安全 线程 BufferManager ServiceModel Channels System | 更新日期: 2023-09-27 17:50:29
我通过BufferManager.CreateBufferManager
的静态成员创建了一个缓冲区管理器。这个新创建的BufferManager
由多个线程使用。
我应该将lock
与TakeBuffer()
和ReturnBuffer()
一起使用,还是它在设计上是线程安全的?
内部BufferManager.CreateBufferManager
返回WrappingBufferManager
的一个实例,该实例不采用任何形式的并发控制,但封装SynchronizedPool<T>
的多个实例,这些实例在Take()
创建新缓冲区时采用内部锁定。因此,从WrappingBufferManager
的简单性来看,可以安全地假设您部分的任何锁定都是冗余的,并且返回的类实际上是线程安全的。
我在使用BufferManager时遇到了线程问题。我在WCF中创建了一个自定义消息编码器,根据我的观察,并不能总是保证为每个调用创建缓冲区管理器。因此,字节被其他线程重用/返回,从而损坏了我的数据。
所以,为了回答你的问题。。。不,它们不是。由于您正在重用同一个实例,因此不能保证它们是线程安全的。