Name Last Update
..
LICENSE Loading commit data...
README.md Loading commit data...
umutex.go Loading commit data...
umutex_test.go Loading commit data...

Unblocking Mutex

This simple package provides unblocking mutexes for those who don't want to write many select clauses or get confused by numerous channels.

Usage Example

package main

import (
    "fmt"
    "github.com/yudai/umutex"
)

func main() {
    // Create mutex
    mutex := umutex.New()

    // First time, try should succeed
    if mutex.TryLock() {
        fmt.Println("SUCCESS")
    } else {
        fmt.Println("FAILURE")
    }

    // Second time, try should fail as it's locked
    if mutex.TryLock() {
        fmt.Println("SUCCESS")
    } else {
        fmt.Println("FAILURE")
    }

    // Unclock mutex
    mutex.Unlock()

    // Third time, try should succeed again
    if mutex.TryLock() {
        fmt.Println("SUCCESS")
    } else {
        fmt.Println("FAILURE")
    }
}

The output is;

SUCCESS
FAILURE
SUCCESS

ForceLock() method is also availale for normal blocking lock.