Что касается класса семафоров в .Net - PullRequest
4 голосов
/ 08 февраля 2010

У меня было требование распределить ресурс по количеству потоков, поэтому я использовал семафоры для обработки всего этого, затем я понял, что семафоры используются в случае межпроцессной блокировки ресурсов. Я гуглил и нашел некоторую реализацию внутрипроцессного семафора и использовал этот класс, но у него есть некоторые странные ошибки.

Теперь мой вопрос: должен ли я использовать класс семафоров Dot Net ?? и есть ли в любом случае, я могу создать в процессе семафор и снизить стоимость межпроцессного (внутреннего управления)

Ответы [ 3 ]

4 голосов
/ 08 февраля 2010

Класс Semaphore имеет несколько конструкторов. Некоторые из перегрузок позволяют указать имя. Присвоение имени экземпляру семафора делает его доступным для других процессов. Если вам это не нужно, просто используйте один из других конструкторов. IIRC там все еще объект ядра, связанный с экземпляром, хотя.

См. http://msdn.microsoft.com/en-us/library/e1hct27h.aspx.

3 голосов
/ 08 февраля 2010

Если вы не многопрофильный гуру, я бы посоветовал вам придерживаться известных рабочих классов. Так что да, придерживайтесь класса .NET семафоров, если он работает для вашей задачи.

Не оптимизируйте микро-код, если у вас нет веской причины (например, результаты профилировщика).

Тем не менее, если ваш кодовый шаблон похож на шаблон производителя-потребителя, существует эффективных решений, использующих класс Monitor , которые избегают использования объектов синхронизации ОС.

1 голос
/ 03 апреля 2013

Начиная с .NET 4.0, вы можете использовать класс SemaphoreSlim, если у вас нет необходимости ждать за границами процесса.

Здесь - еще одно обсуждение выбора между ними.

...