Как контролировать доступ к разделу кода через AppDomains? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть метод, который мне нужен только фиксированное количество потоков для доступа в любой момент времени. Думайте об этом как о реализации контроля параллелизма. Эти потоки могут распространяться по доменам приложений , поэтому обычный семафор не будет работать. Первоначальное исследование показало, что именованные мьютексы являются единственными WaitHandles, которые могут охватывать домены приложений. Итак, если я хочу, чтобы N одновременных потоков могли запускать метод, я объявляю N именованных мьютексов глобально? Использование OpenExisting для каждого из них внутри каждого AppDomain даст мне список всех доступных мьютексов, но тогда мне придется вызывать WaitAny (), который возвращает только индекс мьютекса, который сигнализировал, а не сам мьютекс. Как я могу гарантировать, что только один мьютекс (если он вообще существует) из списка будет заблокирован любым запросом, и что этот же мьютекс будет использоваться для выполнения следующего метода?

Объяснение на основе кода вопроса следует:

index = Mutex.WaitAny(ListofNnamedMutexes, timespan)
//Need to call ListofNnamedMutexes[index].WaitOne() again?
**Call the concurrency controlled method**
//Release the Mutex if locked

Будет ли это работать? Есть ли лучший способ добиться этого? N здесь может быть что угодно. 5, 20, 100 ...

...