
想着用 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() 1 goofool 2018-02-07 16:37:36 +08:00 可以参考 TCP 协议,每块加个 id,最后按 id 顺序写入 |
2 Nebell OP 用 channel 阻塞实现了 |