- 41
- 0
问题描述
1.可能我的题目描述的不太清除,这里详细描述一下
项目是用 beego 开发的,其中在控制器中又一个方法
//同步图片
func (this *ApiController) SyncImages() {
.
.
.
go models.TestSyncImages(images)
.
.
.
}
在另外一个 models包里面有上述协程调用的方法
func TestSyncImages(list []SyncImage) {
var image = auxpi.Image{}
var wg sync.WaitGroup
for _, value := range list {
go func(url string, id uint) {
wg.Add(1)
defer wg.Done()
res, _ := http.Get(url)
lUrl, name, del := localStoreInfo(res.Header.Get("Content-Type"), url)
dst, _ := os.Create(name)
io.Copy(dst, res.Body)
image.ID = id
image.Url = lUrl
image.Delete = del
AddSyncImage(image)
}(value.External, value.ImageID)
}
wg.Wait()
}
工作流程是:
用户提交同步图片的命令->控制器接到数据 SyncImages() 方法->SyncImages() 启用协程去执行 TestSyncImages()方法
但是现在出了一个问题,如果用户同时点击两次甚至多次,会出现重复进入TestSyncImages(),会扰乱当前所在的工作的协程,如果点击多次甚至会出现内存溢出的状况。
请问各位,如何保证 TestSyncImages() 这个方法不会被多次执行,有什么办法给这个东西加锁,或者使用别的更好的方法解决?
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
