增量器不起作用

我有一些应该增加计数的代码。


这是包含count变量的结构:


type PipelineData struct {

    nodeData          map[string]map[string]int

    lastBurstResults  map[string]map[string]string

    burstReady        map[string]bool

    lastExecutionTime map[string]time.Time

    currentNodeSize  uint64

}

如您所见,有一个名为的成员currentNodeSize。此变量旨在在每次addNodeData调用函数时增加。您可以看到该函数addNodeData调用该函数addCount,然后使用原子增量器。


func (p PipelineData) addNodeData(key string) {

    nodeSlot := clusterScenario.GetNodeSlotByHashSlot(key)

    i:=p.nodeData[nodeSlot][key]

    i++ 

    p.nodeData[nodeSlot][key]=i 

    p.addCount()

    fmt.Println("Adding node count ",p.currentNodeSize)

}


func (p PipelineData) addCount(){

    atomic.AddUint64(&p.currentNodeSize, 1) 

}

不幸的是,当我运行此命令时:


p.addNodeData("{pipelinetest}.key");

p.addNodeData("{pipelinetest}.key");

p.addNodeData("{pipelinetest}.key");

p.addNodeData("{pipelinetest}.key");

p.addNodeData("{pipelinetest}.key");    

p.addNodeData("{pipelinetest}.key");                

Dump(p.currentNodeSize) 

输出为0。


这是PipelineData结构的初始化:


p = &PipelineData{

  nodeData:make(map[string]map[string]int,0),

  lastBurstResults:make(map[string]map[string]string,0),

  burstReady:make(map[string]bool,0),

  lastExecutionTime:make(map[string]time.Time,0),

  currentNodeSize:0,

}

for i,_ := range clusterScenario.masterNodes{

    p.nodeData[i]=make(map[string]int,0)

}       

我了解社区已要求我进行研究。我不知道该怎么办。任何帮助,将不胜感激。


我还尝试了使用变量的通用增量器,并且产生了相同的结果,这就是为什么我尝试使用原子增量器的原因


饮歌长啸
浏览 262回答 1
1回答

ITMISS

addCount需要一个值接收器,而不是一个指针,因此它对结构的副本进行操作,增加副本的字段,然后丢弃副本。改为更改它以获取指针:func (p *PipelineData) addCount(){这样可以解决您的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go