(1)count为1,
a、b两个协程同时 count++,最终结果可能还是1
(2)slice,并发写和并发读写都有问题,并发读无问题。
(3)map,并发写和并发读写都有问题,并发读无问题。(注意:map内部识别到存在并发读写行为时会抛final panic,是recover不了的)
因为:
-
在同步模式下,是一个阻塞式写入过程。每循环一次,往切片中追加一个元素,追完完毕之后在进行下一次循环。因此,不会出现追加的元素不正确情况。如下图:
-
多协程写入下,是一个并发式写入过程。我们无法保证每一次的写都是有序的,存在第一个协程向某个
索引位
写入数据之后,后执行的协程同样的往这个索引位写入数据,就导致前面的协程写入数据被后面的协程给覆盖掉。如下图: