22 lines
333 B
Go
22 lines
333 B
Go
package db
|
|
|
|
import "context"
|
|
|
|
type semaphore chan struct{}
|
|
|
|
func newSemaphore() semaphore {
|
|
return make(semaphore, 1)
|
|
}
|
|
|
|
func (semaphore semaphore) With(ctx context.Context, cb func() error) error {
|
|
select {
|
|
case semaphore <- struct{}{}:
|
|
case <-ctx.Done():
|
|
return ctx.Err()
|
|
}
|
|
defer func() {
|
|
<-semaphore
|
|
}()
|
|
return cb()
|
|
}
|