信号管理器
来源:互联网 发布:淘宝上兼职是真的吗 编辑:程序博客网 时间:2024/05/21 06:20
信号管理器
信号
这个实现比较简单。其实经过之前的训练和学习,我们可以总结,一般实现方法就是,分析接口,校验接口中需要的成员变量,定义结构体。结构体实现其成员方法。
具体实现代码如下
package middlewareimport ( "fmt" "sync")type StopSign interface { Sign() bool Signed() bool Reset() Deal(code string) DealCount(code string) uint32 DealTotal() uint32 Summary() string}func NewStopSign() StopSign { ss := &myStopSign{ dealCountMap: make(map[string]uint32), } return ss}type myStopSign struct { rwmutex sync.RWMutex // 读写锁。 signed bool // 表示信号是否已发出的标志位。 dealCountMap map[string]uint32 // 处理计数的字典。}func (ss *myStopSign) Sign() bool { ss.rwmutex.Lock() defer ss.rwmutex.Unlock() if ss.signed { return false } ss.signed = true return true}func (ss *myStopSign) Signed() bool { return ss.signed}func (ss *myStopSign) Reset() { ss.rwmutex.Lock() defer ss.rwmutex.Unlock() ss.signed = false ss.dealCountMap = make(map[string]uint32)}func (ss *myStopSign) Deal(code string) { ss.rwmutex.Lock() defer ss.rwmutex.Unlock() if ss.signed { return } if _, ok := ss.dealCountMap[code]; ok { ss.dealCountMap[code] = 1 } else { ss.dealCountMap[code] += 1 }}func (ss *myStopSign) DealCount(code string) uint32 { ss.rwmutex.RLock() defer ss.rwmutex.RUnlock() return ss.dealCountMap[code]}func (ss *myStopSign) DealTotal() uint32 { ss.rwmutex.RLock() defer ss.rwmutex.RUnlock() var total uint32 for _, v := range ss.dealCountMap { total += v } return total}func (ss *myStopSign) Summary() string { if ss.signed { return fmt.Sprintf("signed: true, dealCount: %v", ss.dealCountMap) } else { return "signed: false" }}
阅读全文
0 0
- 信号管理器
- 布局管理器 信号函数重载 函数指针
- Scrapy源码分析(三):信号管理器SignalManager
- qt学习笔记(二)之布局管理器&信号与槽(简介)
- qt学习笔记(二)之布局管理器&信号与槽(简介)
- 信号
- 信号
- 信号
- 信号
- 信号
- 信号
- 信号
- 信号
- 信号
- <>信号
- 信号
- 信号
- 信号
- HDU 2871 Memory Control(线段树区间合并+各种综合运用)【好题】
- 插件加载
- 解决PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误。
- 面试
- 程序员必读书单 1.0
- 信号管理器
- Jmap
- <c++>多态
- 【File】File类基础
- C#利用反射调用基类私有方法 及 Unity实现自定义InputField
- C++作用域与标识符的可见性
- 动态规划-背包问题(给定容量获得最大的价值量)2
- Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
- hibernate入门(1)