safeint.go 628 B

1234567891011121314151617181920212223242526272829303132
  1. package safeint
  2. import "sync"
  3. /*
  4. Потокобезопасное целое
  5. */
  6. // SafeInt -- потокобезопасное целое
  7. type SafeInt struct {
  8. val int
  9. block sync.RWMutex
  10. }
  11. // NewSafeInt -- возвращает новый *SafeInt
  12. func NewSafeInt() *SafeInt {
  13. return &SafeInt{}
  14. }
  15. // Get -- возвращает хранимое значение
  16. func (sf *SafeInt) Get() int {
  17. sf.block.RLock()
  18. defer sf.block.RUnlock()
  19. return sf.val
  20. }
  21. // Set -- устанавливает хранимое значение
  22. func (sf *SafeInt) Set(val int) {
  23. sf.block.Lock()
  24. defer sf.block.Unlock()
  25. sf.val = val
  26. }