Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


¬озможные ловушки и распространенные ошибки




—уществует р€д факторов, о которых следует всегда помнить при разработке многопоточных программ. ѕренебрежение некоторыми базовыми принципами может привести к по€влению серьезных дефектов в программе, и лучше заранее стремитьс€ к тому, чтобы не допустить ошибок, чем впоследствии затрачивать врем€ на тестирование и отладку программ.

—ущественно то, что потоки выполн€ютс€ в асинхронном режиме. ѕо отношению к ним не действует никака€ система упор€дочени€, если только вы не создали ее €вно. »менно асинхронное поведение потоков делает их столь полезными, однако при отсутствии должного внимани€ можно столкнутьс€ с серьезными трудност€ми.

„асть соответствующих рекомендаций представлена ниже, а остальные будут даватьс€ по мере изложени€ материала в последующих главах.

Х Ќе делайте никаких предположений относительно очередности выполнени€ родительских и дочерних потоков. ¬полне возможно, что дочерний поток будет выполн€тьс€ вплоть до своего завершени€, прежде чем родительский поток вернетс€ из функции CreateThread, или наоборот, дочерний поток может вообще не выполн€тьс€ в течение длительного периода времени. ¬ случае же SMP-систем возможно параллельное выполнение родительского и одного или нескольких дочерних потоков.

Х ”бедитесь в том, что до вызова функции CreateThread были завершены все действи€ по инициализации данных, необходимые дл€ правильной работы дочернего потока, либо приостановите поток или же воспользуйтесь любой другой подход€щей методикой. Ќесвоевременна€ инициализаци€ данных, требуемых дочерним потоком, может создать "услови€ сост€заний" ("race conditions"), суть которых заключаетс€ в том, что родительский поток "сост€заетс€" с дочерним, чтобы инициализировать данные до того, как они начнут использоватьс€ дочерним потоком.

Х ѕроследите за тем, чтобы каждый отдельный поток имел собственную структуру данных, переданную ему через параметр функции потока. Ќе делайте никаких предположений относительно очередности завершени€ дочерних потоков (иначе можете столкнутьс€ с другой разновидностью "проблемы сост€заний").

Х ¬ыполнение любого потока может быть прервано в любой момент, и точно так же выполнение любого потока в любой момент может быть возобновлено.

Х Ќе пользуйтесь приоритетами потоков в качестве замены €вной синхронизации.

Х Ќикогда не прибегайте к аргументации наподобие "вр€д ли это может произойти" при анализе корректности программы. ≈сли что-то может произойти, оно об€зательно произойдет, причем тогда, когда вы меньше всего этого ожидаете.

Х ¬ еще большей степени, чем в случае однопоточных программ, справедливо утверждение о том, что, хот€ тестирование и необходимо, но его одного еще не достаточно дл€ проверки корректности многопоточной программы. ƒовольно часто программы способны успешно пройти через самые различные тесты, несмотр€ на наличие в них дефектов. Ќичто не может заменить тщательно выполненных проектировани€, реализации и анализа кода.

Х ѕоведение многопоточных программ может заметно мен€тьс€ в зависимости от быстродействи€ и количества процессоров, версии ќ— и множества других факторов. “естирование программы в самых различных системах помогает вы€влению всевозможных дефектов, но предыдущее предостережение остаетс€ в силе.

Х ”бедитесь в том, что предусмотрели дл€ потоков достаточно большой объем стека, хот€ заданного по умолчанию стека размером 1 ћбайт в большинстве случаев вам должно хватить.

Х ѕотоки следует использовать только тогда, когда это действительно необходимо. “аким образом, если по самой своей природе некоторые операции допускают параллелизм, то каждое такое действие может быть представлено потоком. ¬ то же врем€, если операци€м присуща очередность, то потоки лишь усложн€т программу, а св€занный с ними расход системных ресурсов может привести к снижению производительности.

Х   счастью, чаще всего корректно работают самые простые программы и те, отличительной чертой которых €вл€етс€ элегантность. ѕри малейшей возможности избегайте усложнени€ программ.





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-09-20; ћы поможем в написании ваших работ!; просмотров: 480 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

¬елико ли, мало ли дело, его надо делать. © Ќеизвестно
==> читать все изречени€...

740 - | 550 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.013 с.