Skip to content

concurrency primitive for sequentially executing queries with the same key

License

Notifications You must be signed in to change notification settings

utherbit/keylock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

About

concurrency primitive for sequentially executing queries with the same key

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages