Мне нужен замок, похожий на тот, что приведен в ответе Стивена Клири: https://stackoverflow.com/a/31194647/4381408
Однако мне также нужно иметь возможность заблокировать все ключи одновременно.Я также использую библиотеку AsyncEx Стивена Клири , поэтому я подумал объединить AsyncDuplicateLock с AsyncReaderWriterLock следующим образом:
public sealed class AsyncDuplicateReaderWriterLock
{
private AsyncReaderWriterLock _rwLock = new AsyncReaderWriterLock();
private AsyncDuplicateLock _duplicateLock = new AsyncDuplicateLock();
public IDisposable ReaderLock(object key)
{
return CollectionDisposable.Create(
_rwLock.ReaderLock(),
_duplicateLock.Lock(key)
);
}
public async Task<IDisposable> ReaderLockAsync(object key)
{
return CollectionDisposable.Create(
await _rwLock.ReaderLockAsync(),
await _duplicateLock.LockAsync(key));
}
public IDisposable WriterLock()
{
return _rwLock.WriterLock();
}
public async Task<IDisposable> WriterLockAsync()
{
return await _rwLock.WriterLockAsync();
}
}
Таким образом, я могу использовать ReaderLock для блокировки наключ и WriterLock для блокировки на все ключи.Крайне важно, чтобы я понял это правильно, поэтому я хочу быть уверен, что для этого нет возможности заблокировать или не заблокировать должным образом.Я не чувствую себя достаточно уверенно в этом.
Так что, будет ли эта работа несколько эффективна и безопасна для потоков?
Спасибо за помощь!