In Go, you can implement file locking and synchronization for concurrent file access by using the sync
package and file locking mechanisms provided by the operating system.
Here's a step-by-step approach to implement file locking and synchronization:
import (
"os"
"sync"
)
var mutex sync.Mutex
mutex.Lock()
and mutex.Unlock()
functions to lock and unlock file access:func writeFile(filename string, data []byte) error {
mutex.Lock()
defer mutex.Unlock()
file, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
return err
}
defer file.Close()
_, err = file.Write(data)
return err
}
writeFile()
function from multiple goroutines to write to the same file concurrently. The mutex lock ensures that only one goroutine can access the file at a time:func main() {
data := []byte("Hello, World!")
go writeFile("file.txt", data)
go writeFile("file.txt", data)
// Wait for goroutines to finish
time.Sleep(time.Second)
}
By using the mutex
to lock and unlock access to the file, you ensure that the file operations are synchronized and avoid concurrent access issues.
Note that file locking techniques may vary depending on the operating system you are using. Refer to the specific file locking mechanism provided by your operating system for more advanced locking options.