An open API service indexing awesome lists of open source software.

https://github.com/brandonkramer/filelock

Cross-platform advisory file locks for single-instance services, registries, and on-disk critical sections.
https://github.com/brandonkramer/filelock

concurrency file-lock go golang library

Last synced: 17 days ago
JSON representation

Cross-platform advisory file locks for single-instance services, registries, and on-disk critical sections.

Awesome Lists containing this project

README

          

# filelock

Cross-platform advisory file locks for single-instance services, registries, and on-disk critical sections.

## Quick start

```go
// Daemon single-instance lock (non-blocking + PID marker)
release, err := filelock.Acquire(context.Background(), "/var/run/myapp/daemon.lock", filelock.WritePID())
if err != nil {
return err
}
defer release()

// Registry / state file sidecar lock
err = filelock.WithSidecar(context.Background(), "/var/lib/myapp/state.json", filelock.DefaultSidecar, func() error {
return updateState()
})
```

## Options

| Option | Use with | Effect |
|--------|----------|--------|
| `WritePID()` | `Acquire`, `With` | Write holder PID into lock file |
| `Blocking()` | `Acquire` | Wait for lock instead of returning `ErrBusy` |
| `NonBlocking()` | `With` | Try once; return `ErrBusy` when held |
| `FileMode(mode)` | both | Permission bits for new lock files |