Синхронизация потоков на основе значения

Я пытаюсь синхронизировать потоки в критической секции, но мне нужно сделать это на основе значения. Например, если у вас есть потоки, выполняющие работу, представляющую разных людей (т. е. Боба, Фреда, Билла), тогда потоки для Боба и Билла могут быть параллельными, но все потоки Боба будут синхронизированы, так что только 1 может пройти через критическую секцию в определенный момент времени. время. Мои первоначальные мысли - использовать именованный мьютекс, но я не уверен, как им управлять. Возможно, какой-то словарь именованных мьютексов. Кто-нибудь делал что-то подобное?


person jsp    schedule 17.08.2012    source источник


Ответы (2)


  • Если у вас есть класс Person, представляющий человека (Боба, Билла и т. д.), вы можете lock на этом экземпляре.
  • Если у вас нет класса, представляющего Person, создайте Dictionary, который сопоставляет уникальные идентификаторы ваших людей экземплярам именованных объектов Mutex. Доступ к самому словарю должен быть синхронизирован. Также обратите внимание, что создание мьютекса в .NET нетривиально. Подробности см. в этом ответе.
person Sergey Kalinichenko    schedule 17.08.2012

Как правило, в таких сценариях у вас будет один экземпляр User для каждого пользователя.

Если это так, вы можете просто lock() на этом экземпляре пользователя.

person SLaks    schedule 17.08.2012
comment
@jsp, как говорит SLaks, используйте lock для текущего пользователя, msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.110).aspx - person Jodrell; 17.08.2012