# 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 LockKeys(keys []string, cancel <-chan struct{}) (canceled bool, unlock func()) } ``` Реализация не должна содержать busy wait. То есть, если вызов LockKeys не может выполниться, потому что какие-то из ключей залочены другими горутинами, то текущая горутина должна засыпать.