Влияние Thread.Sleep () в непрерывном цикле - PullRequest
4 голосов
/ 26 июля 2011

Рассмотрим следующий фрагмент кода:

void MyRunningThread()
{
    while(counter>0) // counter is a Class member that can get modified from external     //threads
    {
         Thread.Sleep(2000);
    }
}

Предположим, я запускаю Thread для вышеуказанной функции.

Теперь, плохо ли иметь такой бесконечный цикл внутри потока? Я добавил Thread.Sleep (), предполагая, что переключение контекста на эту функцию будет происходить с меньшей частотой из-за режима сна и, следовательно, уменьшит потребление ресурсов этим потоком.

Может ли кто-нибудь проверить мои очки.

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Это далеко не оптимально, тратить нить.

Вы должны рассмотреть возможность использования таймера или WaitHandle или что-то.Без подробностей невозможно быть точным.

Но ваш текущий подход не является катастрофическим или чем-то еще, при условии, что этот другой поток использует lock или InterLocked для изменения счетчика.

2 голосов
/ 12 августа 2011

Попробуйте использовать System.Threading.SpinWait вместо сна, в этой статье объясняется, как его использовать http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html

0 голосов
/ 26 июля 2011

Не могли бы вы подробнее рассказать о своей проблеме? Зачем вам ждать в другой ветке? В любом случае, если вам нужно подождать, пока какой-нибудь счетчик не станет равным нулю, вы можете использовать CountdownEvent

...