Главная arrow С++ (часть 3) arrow Почему в С++ нет встроенной поддержки многопоточности?

Почему в С++ нет встроенной поддержки многопоточности?

Язык С++ не содержит никакой встроенной поддержки для многопоточных приложений. Наоборот, он целиком полагается на операционную систему, обеспечивающую эту возможность. Зная, что в языки Java и С# включена встроенная поддержка многопоточности, естественно спросить, почему же ее нет в языке С++? Эффективность, управление и диапазон приложений, в которых применяется язык С++, можно считать ответами на этот вопрос. Рассмотрим каждый из них.
Сказываясь от встроенной поддержки многопоточности, язык С++ не пытается найти одно универсальное решение. Вместо этого С++ дает вам возможность использовать функции многопоточности, предоставляемые опера-ЧИонной системой. Такой подход означает, что ваши программы могут быть многопоточными с наибольшей степенью эффективности, обеспечиваемой исполняющей средой. Поскольку многие многозадачные системы предлагают разнообразную поддержку многопоточности, возможность ее применения становится решающей для создания высокопроизводительных многопоточных программ.
Использование функций операционной системы, обеспечивающих многопоточность, предоставляет вам доступ к полному набору средств управления и контроля, предлагаемых исполняющей средой. Рассмотрим операционную систему Windows. Она определяет богатый набор относящихся к управлению потоками функций, которые делают возможным скрупулезный контроль над созданием потока и управлением им. Например, Windows обладает несколькими способами управления доступом к разделяемому или совместно используемому ресурсу (shared resource), включая семафоры (semaphores), объекты-мьютексы (mutexes), объекты-события, таймеры ожидания (waitable timers) и критические секции. Этот уровень гибкости не может быть легко встроен в язык программирования, потому что у операционных систем другие возможности. Следовательно, поддержка многопоточности в языке обычно означает предложение только небольшого набора общеупотребительных функциональных средств ("наименьшего общего знаменателя"). Что касается С++, то вы получаете полный доступ ко всем функциональным возможностям, обеспечиваемым операционной системой. Это существенное преимущество при разработке высокопроизводительного кода.
Язык С++ создан для программирования разнообразных типов задач, от встроенных систем (embedded system), в которых нет операционной системы в исполняющей среде, до сильно распределенных, базирующихся на GUI (Graphic User interface, Графический интерфейс пользователя) приложений конечного пользователя и всех промежуточных вариантов. Следовательно, С++ не может налагать существенных ограничений на исполняющую среду. Встраивание поддержки многопоточности в язык С++ сделает его пригодным только для систем, которые ее обеспечивают, и тем самым помешает использовать С++ для создания программного обеспечения в однопоточной среде. В заключение отмечу, что разработка программы без поддержки многопоточности — главное достоинство языка С++, позволяющее писать программы, наиболее эффективные для их исполняющей среды. Помните, С++ полон возможностей. В случае многопоточности девиз: "меньше средств — больше возможностей" оказывается как нельзя кстати.