我通过BufferManager.CreateBufferManager
. 这个新创建BufferManager
的被多个线程使用。
我应该使用lock
withTakeBuffer()
还是ReturnBuffer()
它在设计上是线程安全的?
我通过BufferManager.CreateBufferManager
. 这个新创建BufferManager
的被多个线程使用。
我应该使用lock
withTakeBuffer()
还是ReturnBuffer()
它在设计上是线程安全的?
在内部BufferManager.CreateBufferManager
返回一个实例,该实例不采用任何形式的并发控制,但在获取新缓冲区时WrappingBufferManager
包装了多个SynchronizedPool<T>
采用内部锁定的实例。Take()
因此,从 的简单性来看WrappingBufferManager
,可以安全地假设您的任何锁定都是多余的,并且返回的类实际上是线程安全的。
我遇到了 BufferManager 的线程问题。我在 WCF 中创建了一个自定义消息编码器,根据我的观察,并不总是保证每次调用都会创建缓冲区管理器。因此,字节被其他线程重用/返回,从而破坏了我的数据。
所以,回答你的问题......不,他们不是。由于您正在重用同一个实例,因此不能保证它们是线程安全的。