From 6571642c66bfcef49a1cc18b950b09f13131dd5a Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 26 Feb 2017 00:00:50 +0100 Subject: Split files --- forks.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 forks.go (limited to 'forks.go') diff --git a/forks.go b/forks.go new file mode 100644 index 0000000..ba57ef7 --- /dev/null +++ b/forks.go @@ -0,0 +1,33 @@ +package main + +import "time" + +type Fork chan struct{} + +func NewForks(n int) []Fork { + forks := make([]Fork, n) + + for i := range forks { + forks[i] = make(Fork, 1) + forks[i].Put() + } + + return forks +} + +func (f Fork) Grab() { + <-f +} + +func (f Fork) TryGrab(d time.Duration) bool { + select { + case <-f: + return true + case <-time.After(d): + return false + } +} + +func (f Fork) Put() { + f <- struct{}{} +} -- cgit v1.2.3