初级会员
  • 第 53807 位会员
  • boonbonnpeng
  • 2020-06-10 16:30:15
  • Offline
  • 19 60

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 找到了一条对竞态条件的描述:“不要做任何关于CPU速度和数量的假设”。也就是说,你并不能假定Sleep10秒,test就能执行完毕。
  • 如果两个协程非同步的访问同一个变量,就认为触发了竞态条件。虽然你Sleep了,基本不可能出现多个协程同时访问myMap,但语义上这还是非同步的。
  • 这不是sync.Mutex的问题,这是map的问题。map在执行任何操作时如果检测到有其它协程在写map就会panic。
  • 不清楚作者是怎么记录的,我自己一般会录音然后回放复盘。
  • 评论了主题 这个题目有点怪
    `for _, stu := range stus { m[stu.name] = &stu }`</br> 三次循环复用的是同一个stu变量,你对这个stu取指针并赋值到m中,就导致m中三个key映射的都是stu。</br> 在最后一次循环中,stu被赋值为“博客”,所以最后三个key打印出来的都是“博客”。</br> 要解决这个问题,最简单而且不影响原有逻辑的方法是每次循环都定义一个局部变量:</br> `for _, stu := range stus { stu := stu m[stu.name] = stu }`</br> 或者通过下标访问切片:</br> `for i := range stus { m[stus[i].name] = stus[i] }`