Что такое Mutex и семафор В С#? где нам нужно реализовать?

Что такое Mutex и семафор в С#? Где нам нужно реализовать?

Как мы можем работать с ними в многопоточности?

Ответы

Ответ 1

Вы должны начать с MSDN.

  • System.Threading.Mutex: примитив синхронизации, который также может использоваться для межпроцессной синхронизации.
  • System.Threading.Semaphore: Ограничивает количество потоков, которые могут одновременно обращаться к ресурсу или пулу ресурсов.

Обычно вы используете только Mutex через процессы, например. если у вас есть ресурс, который должен предоставить несколько приложений, или если вы хотите создать однострочное приложение (т.е. разрешить только одно копирование одновременно).

Семафор позволяет ограничить доступ к определенному числу одновременных потоков, так что вы могли бы иметь, например, максимум два потока, выполняющих определенный путь кода за раз.

Ответ 3

Возможно, вы захотите проверить оператор блокировки. Он может обрабатывать подавляющее большинство задач синхронизации потоков в С#

class Test {
    private static object Lock = new object();

    public function Synchronized()
    {
        lock(Lock)
        {
            // Only one thread at a time is able to enter this section
        }
    }
}

Оператор блокировки реализуется путем вызова Monitor.Enter и Monitor.Exit. Это эквивалентно следующему коду:

Monitor.Enter(Lock);    
try
{
    // Only one thread at a time is able to enter this section
}
finally
{
    Monitor.Exit(Lock);
}