Действительно ли это - надлежащее использование взаимного исключения?

Попробуйте использовать умножение:

"amix=inputs="+ chunks.length + ":duration=first:dropout_transition=3,volume=" + chunks.length
10
задан Lawrence Johnston 5 September 2008 в 21:17
поделиться

2 ответа

Вы сказали, что несколько экземпляров одного приложения, таким образом, мы говорим приблизительно два под управлением program.exe, правильно? Оператор блокировки не заблокирует через несколько программ, только в рамках программы. Если Вы хотите истинное Взаимное исключение, смотрите на Систему. Поточная обработка. Взаимоисключающий объект.

Вот пример использования:

bool createdNew;
using (Mutex mtx = new Mutex(false, "MyAwesomeMutex", out createdNew))
{
    try
    {
        mtx.WaitOne();

        MessageBox.Show("Click OK to release the mutex.");
    }
    finally
    {
        mtx.ReleaseMutex();
    }
}

createdNew переменная сообщит, была ли она создана в первый раз. Это только говорит Вам, если это было создано, все же. Если Вы хотите получить блокировку, необходимо назвать WaitOne и затем назвать ReleaseMutex для выпуска ее. Если Вы просто хотите видеть, создали ли Вы Взаимное исключение, просто создав оно прекрасно.

19
ответ дан 3 December 2019 в 16:55
поделиться

TheSeeker корректен.

Совет Jeff Richter в Сбросе Через C# (p638-9) на блокировке состоит в том, чтобы создать частный объект специально для цели быть заблокированным.

private Object _lock = new Object();

// usage
lock( _lock )
{
    // thread-safe code here..
}

Это работает, потому что _lock не может быть заблокирован ничем вне текущего класса.

Править: это применимо к потокам, выполняющимся в рамках единственного процесса. ответ Mohundro @David корректен для межпроцессной блокировки.

5
ответ дан 3 December 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: