我正在尝试制作具有推入和弹出功能的队列结构。我需要使用10个线程推入和另外10个线程弹出数据,就像我在下面的代码中所做的那样。问题:我需要打印出我已推送/弹出的数量,但是我不知道该怎么做。反正有加速我的代码吗?代码对我来说太慢了。package mainimport ( "runtime" "time")const ( DATA_SIZE_PER_THREAD = 10000000)type Queue struct { records string}func (self Queue) push(record chan interface{}) { // need push counter record <- time.Now()}func (self Queue) pop(record chan interface{}) { // need pop counter <- record}func main() { runtime.GOMAXPROCS(runtime.NumCPU()) //record chan record := make(chan interface{},1000000) //finish flag chan finish := make(chan bool) queue := new(Queue) for i:=0; i<10; i++ { go func() { for j:=0; j<DATA_SIZE_PER_THREAD; j++ { queue.push(record) } finish<-true }() } for i:=0; i<10; i++ { go func() { for j:=0; j<DATA_SIZE_PER_THREAD; j++ { queue.pop(record) } finish<-true }() } for i:=0; i<20; i++ { <-finish }}
2 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
对问题1的回答:正如jimt建议的那样,sync / atomic具有自动更新计数器的功能,这可能对您有用。
问题2的答案:减小DATA_SIZE_PER_THREAD的值,或者更好的方法是使用该程序
package main func main() {}
它以更有效的方式产生与您的程序相同的输出。
认真地说,我了解您已经编写了一个小程序来探索一些概念。您的程序中包含许多问题。现在不是担心速度的时间,而是学习一些基本概念的时间。
- 2 回答
- 0 关注
- 290 浏览
添加回答
举报
0/150
提交
取消