我用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并重新启动它。