safe_int.go 800 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // package safe_int -- потокобезопасный целое
  2. package safe_int
  3. import (
  4. "sync"
  5. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
  6. )
  7. // safeInt -- потокобезопасное целое
  8. type safeInt struct {
  9. sync.RWMutex
  10. val int
  11. }
  12. // NewSafeInt -- возвращает новое потокобезопасное целое
  13. func NewSafeInt() ISafeInt {
  14. sf := &safeInt{}
  15. return sf
  16. }
  17. // Get -- возвращает хранимое целое
  18. func (sf *safeInt) Get() int {
  19. sf.RLock()
  20. defer sf.RUnlock()
  21. return sf.val
  22. }
  23. // Set -- устанавливает целое
  24. func (sf *safeInt) Set(val int) {
  25. sf.Lock()
  26. defer sf.Unlock()
  27. sf.val = val
  28. }
  29. // Reset -- сбрасывает целое
  30. func (sf *safeInt) Reset() {
  31. sf.Lock()
  32. defer sf.Unlock()
  33. sf.val = 0
  34. }