123456789101112131415161718192021222324252627282930 |
- package syncutils
- import "sync"
- type SyncVar[T any] struct {
- writeLocker sync.Locker
- readLocker sync.Locker
- v T
- }
- func NewSyncVar[T any](v T, isRWMutex bool) *SyncVar[T] {
- var writeLocker sync.Locker
- var readLocker sync.Locker
- if !isRWMutex {
- mutex := &sync.Mutex{}
- writeLocker = mutex
- readLocker = mutex
- } else {
- mutex := &sync.RWMutex{}
- writeLocker = mutex
- readLocker = mutex.RLocker()
- }
- return &SyncVar[T]{
- writeLocker: writeLocker,
- readLocker: readLocker,
- v: v,
- }
- }
|