Browse Source

Create semaphore object

renovate/configure
Yota Toyama 8 years ago
parent
commit
1cd19c2f46
  1. 17
      semaphore.go
  2. 28
      semaphore_test.go

17
semaphore.go

@ -0,0 +1,17 @@
package main
type semaphore struct {
channel chan bool
}
func newSemaphore(n int) semaphore {
return semaphore{make(chan bool, n)}
}
func (s semaphore) Request() {
s.channel <- true
}
func (s semaphore) Release() {
<-s.channel
}

28
semaphore_test.go

@ -0,0 +1,28 @@
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewSemaphore(t *testing.T) {
newSemaphore(1)
}
func TestSemaphoreRequest(t *testing.T) {
s := newSemaphore(1)
s.Request()
assert.Equal(t, 1, len(s.channel))
}
func TestSemaphoreRelease(t *testing.T) {
s := newSemaphore(1)
s.Request()
s.Release()
assert.Equal(t, 0, len(s.channel))
}
Loading…
Cancel
Save