Rumah > Artikel > pembangunan bahagian belakang > Contoh yang menunjukkan cara melaksanakan penguncian fail dalam bahasa Go
Dalam sistem pengendalian, kunci fail ialah mekanisme penguncian yang membolehkan integriti dan ketekalan fail dikekalkan apabila berbilang proses atau urutan mengakses fail yang sama. Dalam bahasa Go, penguncian fail juga diperlukan. Artikel ini akan memperkenalkan cara melaksanakan penguncian fail dalam bahasa Go.
Dalam sistem pengendalian Linux, terdapat dua jenis kunci fail, iaitu kunci berasaskan fail (juga dipanggil kunci kumpulan) dan kunci berasaskan rekod Kunci. Jenis kunci yang biasa digunakan adalah seperti berikut:
Kunci fail disediakan oleh bahasa Go
, yang digunakan untuk menyelesaikan masalah antara berbilang isu Akses . Primitif ini tidak berfungsi pada peringkat sistem fail, jadi ia tidak boleh digunakan untuk melaksanakan kunci fail. Jadi bagaimana untuk melaksanakan penguncian fail? sync.Mutex
sync.RWMutex
Dalam bahasa Go, penguncian fail boleh dilaksanakan menggunakan API POSIX menggunakan pakej
"golang.org/x/sys/unix"
pakej golang.org/x/sys/unix
golang.org/x/sys/unix
Go melaksanakan kunci fail
Berikut ialah contoh kod yang melaksanakan penguncian dan pelepasan kunci:
Selepas mengunci blok kod, anda boleh melaksanakan operasi anda. Hanya lepaskan kunci apabila anda selesai dengan operasi atau apabila anda perlu melepaskan kunci. Selain itu, anda tidak boleh mengunci fail jika proses atau utas lain menggunakannya. Pada ketika ini, anda boleh menggunakan benderapackage main import ( "fmt" "golang.org/x/sys/unix" "os" ) func lockFile(f *os.File) error { err := unix.Flock(int(f.Fd()), unix.LOCK_EX|unix.LOCK_NB) if err != nil { return fmt.Errorf("cannot lock file: %s", err.Error()) } return nil } func unlockFile(f *os.File) error { err := unix.Flock(int(f.Fd()), unix.LOCK_UN) if err != nil { return fmt.Errorf("cannot unlock file: %s", err.Error()) } return nil } func main() { f, err := os.OpenFile("/tmp/file.lock", os.O_RDWR|os.O_CREATE, 0666) if err != nil { fmt.Println("error:", err) return } err = lockFile(f) if err != nil { fmt.Println("error:", err) return } // do something err = unlockFile(f) if err != nil { fmt.Println("error:", err) return } }untuk menjadikannya gagal dengan cepat dan mengelakkan kebuntuan.
unix.LOCK_NB
Ringkasan
Atas ialah kandungan terperinci Contoh yang menunjukkan cara melaksanakan penguncian fail dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!