Files
scheduler/signals/table.go

66 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package signals
import (
"github.com/golang-module/carbon/v2"
"sync"
)
// 有关值班表相关的状态
type TablePrototype struct {
lastUpdated carbon.Carbon //值班表最后更新的时间,不要直接读取这个变量
LUMutex sync.RWMutex
needUpdate bool //值班表是否需要更新,不要直接读取这个变量
NUMutex sync.RWMutex
}
var Table TablePrototype
// 下面是操作这些状态的专用函数,用且仅用它们来操作上面的全局变量
// 表格最后的更新时间
func (t *TablePrototype) GetLastUpdated() carbon.Carbon {
t.LUMutex.RLock()
defer t.LUMutex.RUnlock()
return t.lastUpdated
}
// 标记最后更新的时间
func (t *TablePrototype) MarkUpdateTime(newtime carbon.Carbon) error {
t.LUMutex.Lock()
defer t.LUMutex.Unlock()
t.lastUpdated = newtime
return nil
}
// 表格需要更新吗?
func (t *TablePrototype) IsNeedUpdate() bool {
t.NUMutex.RLock()
defer t.NUMutex.RUnlock()
return t.needUpdate
}
// 标记表格要求更新吗
func (t *TablePrototype) MarkUpdateStatus(i bool) error {
t.NUMutex.Lock()
defer t.NUMutex.Unlock()
t.needUpdate = i
return nil
}
// 标记表格更新是这两个函数的wrapper,一般用这个
func (t *TablePrototype) SetUpdated(newtime carbon.Carbon) error {
err := t.MarkUpdateTime(newtime)
if err != nil {
return err
}
err = t.MarkUpdateStatus(false)
if err != nil {
return err
}
return nil
}