gotty/vendor/github.com/yudai/umutex
2016-04-13 16:17:57 +09:00
..
LICENSE Change to go1.6.1 and vendoring 2016-04-13 16:17:57 +09:00
README.md Change to go1.6.1 and vendoring 2016-04-13 16:17:57 +09:00
umutex.go Change to go1.6.1 and vendoring 2016-04-13 16:17:57 +09:00

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.