safebool.go 933 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package safebool
  2. import "sync"
  3. /*
  4. Потокобезопасный булевый признак.
  5. */
  6. // SafeBool -- потокобезопасный булевый признак
  7. type SafeBool struct {
  8. val bool
  9. block sync.RWMutex
  10. }
  11. // NewSafeBool -- возвращает новый *SafeBool
  12. func NewSafeBool() *SafeBool {
  13. return &SafeBool{}
  14. }
  15. // Get -- возвращает хранимое значение булевого признака
  16. func (sf *SafeBool) Get() bool {
  17. sf.block.RLock()
  18. defer sf.block.RUnlock()
  19. return sf.val
  20. }
  21. // Set -- устанавливает хранимое значение булевого признака
  22. func (sf *SafeBool) Set() {
  23. sf.block.Lock()
  24. defer sf.block.Unlock()
  25. sf.val = true
  26. }
  27. // Reset -- сбарсывает хранимое значение булевого признака
  28. func (sf *SafeBool) Reset() {
  29. sf.block.Lock()
  30. defer sf.block.Unlock()
  31. sf.val = false
  32. }