shad-go/keylock
2022-02-10 22:06:57 +00:00
..
keylock.go Resolve "upgrage to 1.17" 2022-02-10 22:06:57 +00:00
keylock_test.go Add test to make sure passed keys are not modified in keylock 2021-02-22 11:21:34 +03:00
README.md README: [keylock] a bit more clear doc for "cancel" argument 2021-04-13 14:17:53 +03:00
speed_test.go Fix keylock test 2020-03-16 16:26:26 +03:00

keylock

Напишите примитив синхронизации, позволяющий "лочить" строки из множества.

package keylock

type KeyLock interface {
    // LockKeys locks all keys from provided set.
    // 
    // Upon successful completion, function guarantees that no other call with intersecting set of keys
    // will finish, until unlock() is called.
    //
    // If cancel channel is closed, function stops trying to lock received keys and returns immediately
    LockKeys(keys []string, cancel <-chan struct{}) (canceled bool, unlock func())
}

Реализация не должна содержать busy wait. То есть, если вызов LockKeys не может выполниться, потому что какие-то из ключей залочены другими горутинами, то текущая горутина должна засыпать.