github.com/network-quality/goresponsiveness@v0.0.0-20240129151524-343954285090/ccw/ccw.go (about) 1 /* 2 * This file is part of Go Responsiveness. 3 * 4 * Go Responsiveness is free software: you can redistribute it and/or modify it under 5 * the terms of the GNU General Public License as published by the Free Software Foundation, 6 * either version 2 of the License, or (at your option) any later version. 7 * Go Responsiveness is distributed in the hope that it will be useful, but WITHOUT ANY 8 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 9 * PARTICULAR PURPOSE. See the GNU General Public License for more details. 10 * 11 * You should have received a copy of the GNU General Public License along 12 * with Go Responsiveness. If not, see <https://www.gnu.org/licenses/>. 13 */ 14 15 package ccw 16 17 import ( 18 "os" 19 "sync" 20 ) 21 22 type ConcurrentWriter struct { 23 lock sync.Mutex 24 file *os.File 25 } 26 27 func NewConcurrentFileWriter(file *os.File) *ConcurrentWriter { 28 return &ConcurrentWriter{sync.Mutex{}, file} 29 } 30 31 func (ccw *ConcurrentWriter) Write(p []byte) (n int, err error) { 32 ccw.lock.Lock() 33 defer func() { 34 ccw.file.Sync() 35 ccw.lock.Unlock() 36 }() 37 return ccw.file.Write(p) 38 }