Ist System.ServiceModel.Channels.BufferManager threadsicher?

8

Ich erstelle einen Puffer-Manager über das statische Mitglied von BufferManager.CreateBufferManager . Diese neu erstellte BufferManager wird von mehreren Threads verwendet.

Soll ich ein lock mit TakeBuffer() und ReturnBuffer() verwenden oder ist es threadsicher?

    
Xaqron 17.04.2011, 23:22
quelle

2 Antworten

4

Intern% BufferManager.CreateBufferManager gibt eine Instanz von WrappingBufferManager zurück, die keine Form der Nebenläufigkeitssteuerung verwendet, sondern mehrere Instanzen von SynchronizedPool<T> umschließt, die interne Sperren verwenden, wenn Take() einen neuen Puffer enthält. Wenn man also die Einfachheit von WrappingBufferManager bedenkt, kann man davon ausgehen, dass jede Sperrung überflüssig ist und die zurückgegebene Klasse tatsächlich Thread-sicher ist.

    
Josh 04.08.2011, 20:11
quelle
0

Ich habe Thread-Probleme mit BufferManager festgestellt. Ich habe einen benutzerdefinierten Nachrichtenencoder in WCF erstellt und basierend auf meinen Beobachtungen ist es nicht immer garantiert, dass der Puffermanager für jeden Aufruf erstellt wird. Daher werden Bytes von anderen Threads wiederverwendet / zurückgegeben, wodurch meine Daten beschädigt werden.

Also, um Ihre Frage zu beantworten ... Nein, sie sind NICHT . Da Sie die gleiche Instanz erneut verwenden, sind sie nicht garantiert threadsicher .

    
Marc Vitalis 02.04.2014 07:49
quelle