shad-go/keylock/README.md

22 lines
936 B
Markdown
Raw Normal View History

2020-03-14 12:11:46 +00:00
# keylock
Напишите примитив синхронизации, позволяющий "лочить" строки из множества.
```go
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
2020-03-14 12:11:46 +00:00
LockKeys(keys []string, cancel <-chan struct{}) (canceled bool, unlock func())
}
2020-03-16 13:19:46 +00:00
```
2021-03-27 19:55:44 +00:00
Реализация не должна содержать busy wait. То есть, если вызов LockKeys не может выполниться,
2020-03-16 13:19:46 +00:00
потому что какие-то из ключей залочены другими горутинами, то текущая горутина
2021-03-27 19:55:44 +00:00
должна засыпать.