«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Есть ли в Go шаблон буферизованной блокировки, похожий на буферизованные каналы?

Есть ли в Go шаблон буферизованной блокировки, похожий на буферизованные каналы?

Опубликовано 23 декабря 2024 г.
Просматривать:651

Is There a Buffered Locking Pattern in Go Similar to Buffered Channels?

Буферизованный шаблон блокировки в Go

В Go буферизованный канал позволяет продолжать связь без блокировки до тех пор, пока его буфер не заполнится. Однако существует ли аналогичный шаблон для блокировок буферизации, которые ограничивают доступ к ресурсу определенному количеству клиентов?

Примитивом для управления одновременным доступом к ресурсу является семафор. Семафор можно легко реализовать с использованием буферизованного канала.

Вот пример:

var semaphore = make(chan struct{}, 4) // allow four concurrent users

func f() {
    // Grab the lock. Blocks if 4 other concurrent invocations of f are running.
    semaphore 

В этом примере семафор с буфером размером 4 создается с помощью семафора := make(chan struct{}, 4). Функция f() пытается получить блокировку, отправляя в канал пустую структуру. Если буфер канала заполнен (т. е. 4 одновременных экземпляра f() уже запущены), вызов семафора

Когда функция завершит свою работу задача, она снимает блокировку, извлекая из канала пустую структуру (-

Этот шаблон обеспечивает удобный способ ограничить доступ к общему ресурсу определенным количеством одновременных клиентов, предотвращая потенциальные проблемы конкуренции за ресурсы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3