想着用 Go 写个 mmap + 并发读写文件的小程序,但是加了锁后输出顺序很有问题,俩文件都不一样.
求教怎么并发按顺序写出...
var mmFile, err = mmap.Open(filename)
var size, n = mmFile.Len() / 10, 0
var merr error
var Mutex sync.Mutex
var Wg sync.WaitGroup
var buf = make([]byte, size)
for i := 0; i < mmFile.Len() && io.EOF != merr; i += len(buf) {
Wg.Add(1)
go func(off int64) {
n, merr = mmFile.ReadAt(buf, off)
Mutex.Lock()
defer Mutex.Unlock()
if merr != nil {
log.Println(merr)
}
wFile.Write(buf[:n])
buf = make([]byte, size)
Wg.Done()
}(int64(i))
}
Wg.Wait()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.