робуйте включить вызов yield()
Автор admin Четверг, 25 июня 2009 11:32
робуйте включить вызов yield() между первым и вторым инкрементом. Так или иначе, рано или поздно ошибка должна произойти, потому что программные потоки EvenChecker могут обращаться к данным EvenGenerator, находящимся в «неправильном» состоянии. Управление доступом В предыдущем примере продемонстрирована фундаментальная проблема, возникающая при использовании программных потоков: программист не знает, в какой момент выполняется тот или иной поток. Представьте, что вы сидите за столом и готовитесь нацепить на вилку последний кусок колбасы, лежащий на тарелке. Но когда вы уже потянулись за ним, колбаса вдруг исчезает (потому что ваш программный поток был приостановлен, а в это время явился другой едок и все съел). Такие проблемы приходится решать при написании многопоточных программ. Иногда вас совершенно не интересует, могут ли другие потоки обращаться к ресурсу во время его использования (например, при параллельном чтении данных). Но в большинстве случаев это существенно, и чтобы многопоточные приложения нормально работали, необходимы какие-то средства предотвращения одновременного доступа к ресурсу (хот
Комментарии закрыты.
Последние комментарии