go tour exercise---Web Crawler

LunaD · · 114 次点击 · 开始浏览    置顶
#### 接触并发编程不多,所以问题有点基础 ### 前提: 完成了整个go tour课程+练习 (吐槽下,tour.studygolang.com 的教程内容,https://tour.golang.org 不一致,https://tour.golang.org/welcome/3 生生被吃掉了,而且居然比用 go tool tour 本地起服的版本“精简”了辣木多 —_—!) 提醒后续学习,都要以英文版为优,所有练习,都是针对前面铺垫的教程来的,所以练习solution以 https://github.com/golang/tour/blob/master/solutions 所提供的作为最佳参考之一 ### 问题: Web Crawler 练习题( https://tour.golang.org/concurrency/10 ),参考solution( https://github.com/golang/tour/blob/master/solutions/webcrawler.go ) **(简述)**solution代码第53行处但锁是否可以不设立 **(详细)**参考解决方案中,共有两处使用了sync.Mutex来lock和unlock, 第一处为solution代码第39行处,检查当前方法执行环境下被爬的url是否已经被爬过,此处并发锁理解为,多个线程同时进行网址爬取,相同网址被线程1和2同时爬取时,线程1可能已经在进行爬取,但未写入爬取结果,此时线程2查询当前网址是否被爬取过时,查询结果为未爬取过,导致线程1、2同时对一个网址进行了两次爬取操作。 第二处为solution代码第53行处,将当前执行线程中爬取网址成功与否记录到已爬取网址记录中,既然题目表示只需要防止重复爬取,第一处并行锁不足以满足这点吗?第二处的并行锁存在的意义是什么?可以去掉吗? #### 感谢浏览,希望能得到解答
114 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传