douqianrou9079 2016-06-16 14:30
浏览 84

Golang并发死锁[重复]

Can anyone help me determine why I get deadlock errors at the end of this Go code I'm writing? The program actually runs properly but I get a deadlock errors. I'm new to writing concurrent code so any help is greatly appreciated. I have omitted some lines that I know aren't the problem just to make it quicker to read.

func MoveWorksheets(worksheetList []string) {

var wg sync.WaitGroup

for _, worksheet := range worksheetList {

    wg.Add(1)

    go MoveFile(src, dst, wg)

    }

    wg.Wait()
}

func MoveFile(src, dst string, wg sync.WaitGroup) (err error) {

    defer wg.Done()

    sfi, err := os.Stat(src)
    if err != nil {
        return
    }
    if !sfi.Mode().IsRegular() {
        // cannot copy non-regular files (e.g., directories,
        // symlinks, devices, etc.)
        return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String())
    }
    dfi, err := os.Stat(dst)
    if err != nil {
        if !os.IsNotExist(err) {
            return
        }
    } else {
        if !(dfi.Mode().IsRegular()) {
            return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String())
        }
        if os.SameFile(sfi, dfi) {
            return
        }
    }
    /*if err = os.Link(src, dst); err == nil {
        return
    }*/
    err = MoveFileContents(src, dst)
    return
}

func MoveFileContents(src, dst string) (err error) {

    merr := os.Rename(src, dst)

    if merr != nil {
        log.Fatal(merr)
    }

    return
}
</div>
  • 写回答

2条回答 默认 最新

  • dsv17139 2016-06-16 14:55
    关注

    MoveFile is getting a copy of wg, so you're calling Wait() and Done() on different WaitGroups. Try passing it as a pointer.

    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助