Примитив, который блокирует некоторый ресурс для ограниченного количества клиентов, называется семафором .
. Он легко реализуется с помощью буферизованного канала:
var semaphore = make(chan struct{}, 4) // allow four concurrent users
func f() {
// Grab the lock. Blocks as long as 4 other invocations of f are still running.
semaphore <- struct{}{}
// Release the lock once we're done.
defer func() { <-semaphore }()
// Do work...
}