arm-linux-androideabi-ld.exe не может найти -lrtlhelper

В документации объясняется (в разделе «Замечания»), что существует концептуальная разница между экземпляром объекта Mutex (который делает не , фактически, делать что-либо особенное насколько синхронизация идет) и получение Mutex (с использованием WaitOne ). Обратите внимание, что:

  • WaitOne возвращает логическое значение, что означает, что получение Mutex может сбой (время ожидания), и оба случая должны быть обработаны
  • Когда WaitOne возвращает true, тогда вызывающий поток приобрел Mutex и должен вызывать ReleaseMutex, иначе Mutex перестанет
  • Когда он вернет false ], то вызывающий поток не должен вызывать ReleaseMutex

Итак, для мьютексов больше, чем для создания экземпляра. Что касается того, следует ли использовать using в любом случае, давайте посмотрим, что делает Dispose (поскольку унаследовано от WaitHandle ):

protected virtual void Dispose(bool explicitDisposing)
{
    if (this.safeWaitHandle != null)
    {
        this.safeWaitHandle.Close();
    }
}

Как мы можем см., Mutex выпущен не , но есть какая-то очистка, поэтому прилипание с using было бы хорошим подходом.

Что касается того, как вы должны действовать, вы можете конечно, используйте блок try/finally, чтобы убедиться, что, если Mutex получен, что он правильно выпущен. Это, вероятно, самый простой подход.

Если вы действительно не заботятся о случае, когда Mutex не может быть приобретен (что вы не указали, поскольку вы проходите мимо a TimeSpan - WaitOne), вы можете обернуть Mutex в свой класс, который реализует IDisposable, получить Mutex в конструкторе (используя WaitOne() без аргументов) и выпустить его внутри Dispose. Хотя, я бы, вероятно, не рекомендовал бы это, так как это заставило бы ваши потоки ждать бесконечно, если что-то пойдет не так, и независимо от того, есть веские причины для явной обработки обоих случаев при попытке приобретения, как упомянуто @HansPassant.

1
задан user1580348 17 February 2019 в 17:49
поделиться