System.ServiceModel.Channels.BufferManager线程安全吗

本文关键字:安全 线程 BufferManager ServiceModel Channels System | 更新日期: 2023-09-27 17:50:29

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

我应该将lockTakeBuffer()ReturnBuffer()一起使用,还是它在设计上是线程安全的?

System.ServiceModel.Channels.BufferManager线程安全吗

内部BufferManager.CreateBufferManager返回WrappingBufferManager的一个实例,该实例不采用任何形式的并发控制,但封装SynchronizedPool<T>的多个实例,这些实例在Take()创建新缓冲区时采用内部锁定。因此,从WrappingBufferManager的简单性来看,可以安全地假设您部分的任何锁定都是冗余的,并且返回的类实际上是线程安全的。

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

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