mirror of https://github.com/k3s-io/k3s
32 lines
695 B
Markdown
32 lines
695 B
Markdown
|
# FileMutex
|
||
|
|
||
|
FileMutex is similar to `sync.RWMutex`, but also synchronizes across processes.
|
||
|
On Linux, OSX, and other POSIX systems it uses the flock system call. On windows
|
||
|
it uses the LockFileEx and UnlockFileEx system calls.
|
||
|
|
||
|
```go
|
||
|
import (
|
||
|
"log"
|
||
|
"github.com/alexflint/go-filemutex"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
m, err := filemutex.New("/tmp/foo.lock")
|
||
|
if err != nil {
|
||
|
log.Fatalln("Directory did not exist or file could not created")
|
||
|
}
|
||
|
|
||
|
m.Lock() // Will block until lock can be acquired
|
||
|
|
||
|
// Code here is protected by the mutex
|
||
|
|
||
|
m.Unlock()
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Installation
|
||
|
|
||
|
go get github.com/alexflint/go-filemutex
|
||
|
|
||
|
Forked from https://github.com/golang/build/tree/master/cmd/builder/filemutex_*.go
|