Каков правильный способ гарантировать, что только «последний» поток получит доступ к мьютексу/заблокированной области, в то время как промежуточные потоки не получат блокировку?
Пример последовательности:
A acquires lock
B waits
C waits
B fails to acquire lock*
A releases lock
C acquires lock
*B не должен получить блокировку либо через исключение (как в SemaphoreSlim.Wait(CancellationToken)
, либо через логическую конструкцию типа Monitor.TryEnter()
.
Я могу придумать несколько подобных схем для достижения этой цели (например, использование CancellationTokenSource
и SemaphoreSlim
), но ни одна из них не кажется особенно элегантной.
Есть ли обычная практика для этого сценария?
A
снятием блокировки иC
ее получением —D
войдет? Мне просто любопытно - пытаюсь придумать сценарий, где потребуется такой подход. - person xxbbcc   schedule 02.09.2015SemaphoreSlim.Wait(CancellationToken
), либо через конструкцию логического типаMonitor.TryEnter
. - person Andrew Hanlon   schedule 02.09.2015