8000 GitHub - utherbit/keylock: concurrency primitive for sequentially executing queries with the same key · GitHub
[go: up one dir, main page]

Skip to content
utherbitPublic

About

concurrency primitive for sequentially executing queries with the same key

Resources

Stars

4 stars

Watchers

1 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KeyLock

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

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

Install

go get github.com/utherbit/keylock

Usage

Создание экземпляра KeyLocker

var locker = keylock.NewKeyLocker[int]()

Пример с использованием метода Lock:

func Foo(i int) {
  unlock := locker.Lock(i)
  defer unlock()

  // Do ...
}

Пример с использованием метода Do:

func Foo(i int) {
  locker.Do(i, func() {

    // Do ...
  })
}

Функции Do и Lock выполняют одинаковые действия, разница только в использовании.

Do вызывает unlock автоматический после завершения передаваемой функции.

Lock не создаёт лишней вложенности, в некоторых случаях удобнее использовать, потому что unlock можно вызвать в подходящий момент.

Никогда не вызывайте unlock дважды. Не забывайте вызывать unlock после Lock.

License

Released under the MIT Licence

0