Я пытаюсь синхронизировать потоки в критической секции, но мне нужно сделать это на основе значения. Например, если у вас есть потоки, выполняющие работу, представляющую разных людей (т. е. Боба, Фреда, Билла), тогда потоки для Боба и Билла могут быть параллельными, но все потоки Боба будут синхронизированы, так что только 1 может пройти через критическую секцию в определенный момент времени. время. Мои первоначальные мысли - использовать именованный мьютекс, но я не уверен, как им управлять. Возможно, какой-то словарь именованных мьютексов. Кто-нибудь делал что-то подобное?
Синхронизация потоков на основе значения
Ответы (2)
- Если у вас есть класс
Person
, представляющий человека (Боба, Билла и т. д.), вы можетеlock
на этом экземпляре. - Если у вас нет класса, представляющего
Person
, создайтеDictionary
, который сопоставляет уникальные идентификаторы ваших людей экземплярам именованных объектовMutex
. Доступ к самому словарю должен быть синхронизирован. Также обратите внимание, что создание мьютекса в .NET нетривиально. Подробности см. в этом ответе.
person
Sergey Kalinichenko
schedule
17.08.2012
Как правило, в таких сценариях у вас будет один экземпляр User
для каждого пользователя.
Если это так, вы можете просто lock()
на этом экземпляре пользователя.
person
SLaks
schedule
17.08.2012
@jsp, как говорит SLaks, используйте
lock
для текущего пользователя, msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.110).aspx
- person Jodrell; 17.08.2012