如何通过在Go中并行读取文件来实现更新状态?

时间:2018-01-15 03:57:18

标签: go

我用C语言移植程序。它使用两个线程来工作。 *主线程使用读写锁保存状态图。 *更新线程持续读取连续增长的文件以更新状态图。如果读取失败,用户可以按一个按钮重新读取它。

在Go中执行相同登录的正确方法是什么?这是我的原型

var status = struct {
    sync.RWMutex
    M map[string]string
}
func readFile(filename string) {
    // open file
    for {
        status.Lock()
        // update status
        status.Unlock()
        // run forever util error occurs
    }
}
func main() {
  go readFile("sample.data") 
  go readFile("sample2.data") 
  for {
    status.RLock()
    fmt.Println(status.M)
    status.RUnlock()
    // wait for user command (eg. assign new file to read or stop old file or quit)
  }
}

我知道如何使用sync.RWMutex和goroutine,但问题是如何处理'重新打开文件',它在其他goroutine上,也许gorouting已经退出读取失败,或者它可能仍在运行,我需要停止gorouting并重新启动它。

0 个答案:

没有答案