функция синхронизации - PullRequest
2 голосов
/ 12 мая 2010

как я могу сделать в C #, что моя функция будет защищена семафором мьютекса a.k.a функция синхронизации в JAVA

Ответы [ 4 ]

10 голосов
/ 12 мая 2010

Нет хорошего способа сделать это, кроме как сделать это самостоятельно:

private readonly object _locker = new object();

public void MyMethod()
{
    lock (_locker) {
        // Do something
    }
}
4 голосов
/ 12 мая 2010

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

private readonly object lock_ = new object();

Тогда в любом методе, который вам нужно синхронизировать, используйте конструкцию lock для автоматического входа и выхода из замка: -

public void SomeMethod()
{
    lock(lock_)
    {
         // ...... Do Stuff .........
    }
}
1 голос
/ 28 февраля 2012

Вы можете использовать MethodImpl (MethodImplOptions.Synchronized)

0 голосов
/ 12 мая 2010

Как сказал Джон, вы можете использовать lock (), что то же самое, что Monitor.Enter и Monitor.Exit. Если вам нужен межпроцессный мьютекс, используйте класс Mutex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...