Linux сразу же выделяет память для процесса после mmap ()?

Я бы выполнил это:

public static bool Retry(int maxRetries, Func<bool, bool> method)
{
    while (maxRetries > 0)
    {
        if (method(maxRetries == 1))
        {
            return true;
        }
        maxRetries--;
    }
    return false;        
}

Я бы не использовал исключения, как они используются в других примерах. Мне кажется, что если мы ожидаем, что метод не удастся, его отказ не является исключением. Таким образом, метод, который я вызываю, должен возвращать true, если он преуспел, и false, если он потерпел неудачу.

Почему это Func<bool, bool>, а не только Func<bool>? Поэтому, если я хочу , чтобы метод мог генерировать исключение при ошибке, у меня есть способ сообщить ему, что это последняя попытка.

Поэтому я могу использовать его с кодом типа:

Retry(5, delegate(bool lastIteration)
   {
       // do stuff
       if (!succeeded && lastIteration)
       {
          throw new InvalidOperationException(...)
       }
       return succeeded;
   });

или

if (!Retry(5, delegate(bool lastIteration)
   {
       // do stuff
       return succeeded;
   }))
{
   Console.WriteLine("Well, that didn't work.");
}

Если передача параметра, который метод не использует, доказывает быть неудобным, тривиально реализовать перегрузку Retry, которая просто принимает значение Func<bool>.

0
задан Toby Speight 15 January 2019 в 13:42
поделиться

1 ответ

Нет, Linux может отложить выделение физической памяти, запрошенное mmap, до тех пор, пока эта память не будет доступна.

Когда приложение обращается к неотображенной памяти, срабатывает исключение сбоя страницы ; при обработке этого исключения Linux может отображать доступ к памяти, что позволяет приложению продолжать работу.

0
ответ дан Tsyvarev 15 January 2019 в 13:42
поделиться
Другие вопросы по тегам:

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