8

我通过BufferManager.CreateBufferManager. 这个新创建BufferManager的被多个线程使用。

我应该使用lockwithTakeBuffer()还是ReturnBuffer()它在设计上是线程安全的?

4

2 回答 2

4

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

于 2011-08-04T20:11:01.423 回答
0

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

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

于 2014-04-02T07:49:54.610 回答