Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Threads and Boost.Asio

Boost , Boost.Asio , Core Concepts and Functionality

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Thread Safety

В общем, безопасно одновременное использование различных объектов, но небезопасно одновременное использование одного объекта. Однако такие типы, как<io_service>, обеспечивают более надежную гарантию того, что безопасно использовать один объект одновременно.

Thread Pools

Несколько потоков могут вызывать<io_service::run()>для создания пула потоков, из которых могут вызываться обработчики завершения. Этот подход также может быть использован с<io_service::post()>для использования средства для выполнения любых вычислительных задач в пуле потоков.

Обратите внимание, что все нити, которые присоединились к пулу<io_service>, считаются эквивалентными, и<io_service>могут распределять работу по ним произвольным образом.

Internal Threads

Реализация этой библиотеки для конкретной платформы может использовать один или несколько внутренних потоков для эмуляции асинхронности. Насколько это возможно, эти потоки должны быть невидимы для пользователя библиотеки. В частности, нити:

  • не должны напрямую вызывать код пользователя; и
  • Необходимо блокировать все сигналы.

Этот подход дополняется следующей гарантией:

  • Асинхронные обработчики завершения будут вызываться только из потоков, которые в настоящее время вызывают<io_service::run()>.

Следовательно, пользователь библиотеки несет ответственность за создание и управление всеми потоками, к которым будут доставлены уведомления.

Причины такого подхода включают:

  • При вызове<io_service::run()>из одного потока код пользователя может избежать сложности разработки, связанной с синхронизацией. Например, пользователь библиотеки может реализовать масштабируемые серверы, которые являются однопоточными (с точки зрения пользователя).
  • Пользователю библиотеки может потребоваться выполнить инициализацию в потоке вскоре после запуска потока и до выполнения любого другого кода приложения. Например, пользователи Microsoft COM должны позвонить<CoInitializeEx>, прежде чем можно будет вызвать какие-либо другие операции COM из этого потока.
  • Интерфейс библиотеки отделяется от интерфейсов для создания и управления потоками и допускает реализацию на платформах, где потоки недоступны.
See Also

io_service.


PrevUpHomeNext

Статья Threads and Boost.Asio раздела Boost.Asio Core Concepts and Functionality может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Core Concepts and Functionality ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 19:42:46/0.0061440467834473/0