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