![QQ截图20200309202410.png](https://static.studygolang.com/200309/7a6feee527e68ef018105f7cf276b89c.png)
题目如上,我没做过区块链,但本题看作struct即可,感觉无非就是安全接收并发go程的结果,+1后依次提交吧。
他们要可执行代码,解答如下:
![QQ截图20200309203347.png](https://static.studygolang.com/200309/cd1c8ddbef904d0820da8ad6d6e4c4f1.png)
执行结果也确实依次提交了,感觉很简单的一道题最后告诉我错了,完全不知道错在哪,求大神解答
平时不太用chan, 用mutex用的多一些,
我感觉你这里确实有问题,
因为你并不是利用队列实现了并发,
如果是我做的话, 我会开一个[]数组或者切片来存放所有的block,
然后利用协程来并发做验证.
最后利用一个单独的协程来检查数组中已经完成的block并编号之后丢到提交协程中,
中间会有mutex的介入,可能会有读写锁,
这样做效率应该是不低的.
这种思想类似于map reduce.
个人浅见,说错了勿怪.
#1
更多评论
谢谢回复,说实话这个题目本来就不太明确,我也没准确理解他到底想考什么。
我是看题目里说实现“提交前预处理”环节,所以没写并发过程,只是简单模拟啊。
还有MUTEX效率应该是低于chan的吧所以我特意用了chan... 不管怎么说应该没错啊,那边给我的回复直接是“未实现功能”就不懂了
#2
按照我的标准判断你确实没有实现示意图中的功能.
人家的本意就是让你并行处理一个队列中的block然后加锁串行提交保证编号唯一.
你只是做到了串行提交没有做到并行.
mutex比chan的性能要高, 这个已经有人验证过了.
#3