README

fslock GoDoc

fslock provides a cross-process mutex based on file locks that works on windows and *nix platforms.

fslock

image: public domain (don't ask)

fslock relies on LockFileEx on Windows and flock on *nix systems. The timeout feature uses overlapped IO on Windows, but on *nix platforms, timing out requires the use of a goroutine that will run until the lock is acquired, regardless of timeout. If you need to avoid this use of goroutines, poll TryLock in a loop.

Variables

var ErrLocked error = trylockError("fslock is already locked")

ErrLocked indicates TryLock failed because the lock was already locked.

var ErrTimeout error = timeoutError("lock timeout exceeded")

ErrTimeout indicates that the lock attempt timed out.

type Lock

type Lock struct {
    // contains filtered or unexported fields
}

Lock implements cross-process locks using syscalls.

func New
func New(filename string) *Lock

New returns a new lock around the given file.

func (*Lock) Lock
func (l *Lock) Lock() error

Lock locks the lock. This call will block until the lock is available.

func (*Lock) LockWithTimeout
func (l *Lock) LockWithTimeout(timeout time.Duration) error

LockWithTimeout tries to lock the lock until the timeout expires. If the timeout expires, this method will return ErrTimeout.

func (*Lock) TryLock
func (l *Lock) TryLock() error

TryLock attempts to lock the lock. This method will return ErrLocked immediately if the lock cannot be acquired.

func (*Lock) Unlock
func (l *Lock) Unlock() error

Unlock unlocks the lock.

Expand ▾ Collapse ▴

Documentation

Overview

    Package fslock provides a cross-process mutex based on file locks.

    It is built on top of flock for linux and darwin, and LockFileEx on Windows.

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var ErrLocked error = trylockError("fslock is already locked")

      ErrLocked indicates TryLock failed because the lock was already locked.

      View Source
      var ErrTimeout error = timeoutError("lock timeout exceeded")

        ErrTimeout indicates that the lock attempt timed out.

        Functions

        This section is empty.

        Types

        type Lock

        type Lock struct {
        	// contains filtered or unexported fields
        }

          Lock implements cross-process locks using syscalls. This implementation is based on flock syscall.

          func New

          func New(filename string) *Lock

            New returns a new lock around the given file.

            func (*Lock) Lock

            func (l *Lock) Lock() error

              Lock locks the lock. This call will block until the lock is available.

              func (*Lock) LockWithTimeout

              func (l *Lock) LockWithTimeout(timeout time.Duration) error

                LockWithTimeout tries to lock the lock until the timeout expires. If the timeout expires, this method will return ErrTimeout.

                func (*Lock) TryLock

                func (l *Lock) TryLock() error

                  TryLock attempts to lock the lock. This method will return ErrLocked immediately if the lock cannot be acquired.

                  func (*Lock) Unlock

                  func (l *Lock) Unlock() error

                    Unlock unlocks the lock.