sync_var.go 525 B

123456789101112131415161718192021222324252627282930
  1. package syncutils
  2. import "sync"
  3. type SyncVar[T any] struct {
  4. writeLocker sync.Locker
  5. readLocker sync.Locker
  6. v T
  7. }
  8. func NewSyncVar[T any](v T, isRWMutex bool) *SyncVar[T] {
  9. var writeLocker sync.Locker
  10. var readLocker sync.Locker
  11. if !isRWMutex {
  12. mutex := &sync.Mutex{}
  13. writeLocker = mutex
  14. readLocker = mutex
  15. } else {
  16. mutex := &sync.RWMutex{}
  17. writeLocker = mutex
  18. readLocker = mutex.RLocker()
  19. }
  20. return &SyncVar[T]{
  21. writeLocker: writeLocker,
  22. readLocker: readLocker,
  23. v: v,
  24. }
  25. }