Есть ли буферизованная схема блокировки? - PullRequest
0 голосов
/ 31 января 2020

В Go есть концепция буферизованного канала. Это канал, который не будет заблокирован, пока вы не заполните его буфер.

Существует ли какая-либо общая схема для общей буферизованной блокировки ? Это заблокирует некоторый ресурс для ограниченного количества клиентов.

1 Ответ

7 голосов
/ 31 января 2020

Примитив, который блокирует некоторый ресурс для ограниченного количества клиентов, называется семафором .

. Он легко реализуется с помощью буферизованного канала:

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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...