safe_int.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package safe_int
  2. import (
  3. "sync"
  4. "wartank/pkg/types"
  5. )
  6. /*
  7. Потокобезопасное целое
  8. */
  9. // БезопЦелое -- потокобезопасное целое
  10. type БезопЦелое struct {
  11. знач int
  12. блок sync.RWMutex
  13. }
  14. // НовБезопЦелое -- возвращает новый *БезопЦелое
  15. func НовБезопЦелое() *БезопЦелое {
  16. сам := &БезопЦелое{}
  17. _ = types.ИСбрасыватель(сам)
  18. return сам
  19. }
  20. // Сброс -- сбрасывает в исходное значение
  21. func (сам *БезопЦелое) Сброс() {
  22. сам.блок.Lock()
  23. defer сам.блок.Unlock()
  24. сам.знач = 0
  25. }
  26. // Получ -- возвращает хранимое значение
  27. func (сам *БезопЦелое) Получ() int {
  28. сам.блок.RLock()
  29. defer сам.блок.RUnlock()
  30. return сам.знач
  31. }
  32. // Уст -- устанавливает хранимое значение
  33. func (сам *БезопЦелое) Уст(val int) {
  34. сам.блок.Lock()
  35. defer сам.блок.Unlock()
  36. сам.знач = val
  37. }