modelRT/share_memory/file_lock.go

53 lines
1.2 KiB
Go

package sharememory
import (
"fmt"
"os"
"golang.org/x/sys/unix"
)
func main() {
// 打开文件
file, err := os.OpenFile("testfile.txt", os.O_RDWR|os.O_CREATE, 0o666)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 加独占锁
fmt.Println("Acquiring exclusive lock...")
err = unix.Flock(int(file.Fd()), unix.LOCK_EX)
if err != nil {
fmt.Println("Error acquiring exclusive lock:", err)
return
}
defer unix.Flock(int(file.Fd()), unix.LOCK_UN) // 释放锁
fmt.Println("Exclusive lock acquired. Writing to file...")
// 这里可以添加写文件的逻辑
fmt.Println("Writing complete.")
// 打开文件
file, err = os.OpenFile("testfile.txt", os.O_RDONLY, 0o666)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 加共享锁
fmt.Println("Acquiring shared lock...")
err = unix.Flock(int(file.Fd()), unix.LOCK_SH)
if err != nil {
fmt.Println("Error acquiring shared lock:", err)
return
}
defer unix.Flock(int(file.Fd()), unix.LOCK_UN) // 释放锁
fmt.Println("Shared lock acquired. Reading from file...")
// 这里可以添加读文件的逻辑
fmt.Println("Reading complete.")
}