ThreadSafeBuffer.go 638 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package zsshrpc_server
  2. import (
  3. "bytes"
  4. "sync"
  5. )
  6. type ThreadSafeBuffer struct {
  7. b bytes.Buffer
  8. m sync.RWMutex
  9. }
  10. func (b *ThreadSafeBuffer) Read(p []byte) (n int, err error) {
  11. b.m.RLock()
  12. defer b.m.RUnlock()
  13. return b.b.Read(p)
  14. }
  15. func (b *ThreadSafeBuffer) Write(p []byte) (n int, err error) {
  16. b.m.Lock()
  17. defer b.m.Unlock()
  18. return b.b.Write(p)
  19. }
  20. func (b *ThreadSafeBuffer) String() string {
  21. b.m.RLock()
  22. defer b.m.RUnlock()
  23. return b.b.String()
  24. }
  25. func (b *ThreadSafeBuffer) Reset() {
  26. b.m.Lock()
  27. defer b.m.Unlock()
  28. b.b.Reset()
  29. }
  30. func (b *ThreadSafeBuffer) Len() int {
  31. b.m.RLock()
  32. defer b.m.RUnlock()
  33. return b.b.Len()
  34. }