if (m_processingState != ProcessingState.lookingForPrime) {
return false;
}
//Если число делится без остатка,
//значит, оно не является простым
if (potentialPrime % current_test_item == 0) {
return false;
}
//увеличить число на два
current_test item = current_test_item + 2;
//------------------------------------------
//Увеличить количество проверенных элементов
//------------------------------------------
//ПРИМЕЧАНИЕ. Мы используем блокирование потока для уверенности в том,
//что эти значения не считываются во время выполнения операции
//их записи. Поскольку доступ к m_comparisonsSoFar
//и m_CurrentNumberBeingExamined могут осуществлять
//одновременно несколько потоков, любая выполняемая над ними
//операция записи/считывания должна синхронизироваться с "блокировкой",
//что будет гарантировать "атомарность" этих операций
lock(this) {
m_CurrentNumberBeingExamined = potentialPrime;
m_comparisonsSoFar++;
}
}
//Число является простым
return true;
} //Конец функции
} //Конец класса
Резюме
Фоновые потоки, если только их правильно использовать, могут пригодиться вам для улучшения условий интерактивного взаимодействия конечного пользователя с мобильным приложением за счет повышения способности пользовательского интерфейса к отклику. Фоновые потоки необходимо использовать умеренно, для вполне конкретных целей и лишь в тех случаях, когда они могут помочь вам справиться с реальными трудностями, связанными с обеспечением приемлемых интерактивных свойств приложения, которые не могут быть разрешены при использовании высокоприоритетного потока. Лучше всего проектировать приложение на основе однопоточной модели, привлекая фоновую обработку лишь тогда, когда вы убеждены в ее необходимости.
При написании кода фоновых потоков и проектировании классов, к которым могут иметь доступ одновременно несколько потоков, следует проявлять особую осторожность. Весьма полезно тщательно документировать код приложения, явно указывая, к каким его фрагментам будут пытаться получить доступ одновременно несколько потоков, а к каким, что не менее важно, не будут. Постарайтесь, чтобы количество классов, функций, свойств и переменных-членов, которые должны совместно использоваться несколькими потоками, было как можно меньшим, и уделите повышенное внимание к проектированию, анализу, тестированию и документированию соответствующих фрагментов кода.