Приложение В. Краткое сравнение библиотек для написания параллельных программ
Поддержка параллелизма и многопоточности в языках программирования и библиотеках не является чем-то новым, хотя включение ее в стандарт С++ — действительно новшество. Например, в Java многопоточность поддерживалась уже в самой первой версии; на платформах, согласованных со стандартом POSIX, имеется интерфейс из языка С к средствам многопоточности, предоставляемым операционной системой, а язык Erlang поддерживает параллелизм на основе передачи сообщений. Существуют даже библиотеки классов для С++, например Boost, которые обертывают программный интерфейс к средствам многопоточности, существующим на данной платформе (будь то интерфейс POSIX С или нечто иное) и тем самым предоставляют переносимый интерфейс для всех поддерживаемых платформ.
Для тех, кто уже имеет опыт написания многопоточных приложений и хотел бы воспользоваться им для разработки программ на С++ с применением новых возможностей, в этом приложении проводится сравнение средств, имеющихся в Java, POSIX С, С++ с библиотекой Boost Thread Library и С++11. Даются также перекрестные ссылки на соответствующие главы этой книги.
Средство
Java
Posix C
Boost Threads
C++11
Глава
Запуск потоков
Класс java.lang.thread
Тип pthread_t и соответствующие функции API: pthread_create(), pthread_detach(), pthread_join()
Класс boost::thread и его функции-члены
Класс std::thread и его функции-члены
Глава 2
Взаимное исключение
Блоки synchronized
Тип pthread_mutex_t и соответствующие функции API: pthread_mutex_lock(), pthread_mutex_unlock() и другие
Класс boost::mutex и его функции-члены, шаблоны boost::lock_guard<> и boost::unique_lock<>
Класс std::mutex и его функции-члены, шаблоны std::lock_guard<> и std::unique_lock<>
Глава 3
Ожидание предиката
Методы wait() и notify() класса java.lang.Object, используемые внутри блоков synchronized
Тип pthread_cond_t и соответствующие функции API: pthread_cond_wait(), pthread_cond_timed_wait() и другие
Классы boost::condition_variable и boost::condition_variable_any и их функции-члены
Классы std::condition_variable и std::condition_variable_any и их функции-члены
Глава 4
Атомарные операции и модель памяти с учетом параллелизма
volatile-переменные, типы в пакете java.util.concurrent.atomic
Отсутствует
Отсутствует
Типы std::atomic_xxx, шаблон класса std::atomic<>, функция std::atomic_thread_fence()
Глава 5
Потокобезопасные контейнеры
Контейнеры в пакете java.util.concurrent.
Отсутствует
Отсутствует
Отсутствует
Главы 6 и 7
Будущие результаты
Интерфейс java.util.concurrent.future и ассоциированные с ним классы
Отсутствует
Шаблонные классы boost::unique_future<> и boost::shared_future<>
Шаблонные классы std::future<>, std::shared_future<>, и std::atomic_future<>
Глава 9
Пулы потоков
Класс java.util.concurrent.ThreadPoolExecutor
Отсутствует
Отсутствует
Отсутствует
Глава 9
Прерывание потока
Метод interrupt() класса java.lang.Thread
pthread_cancel()
Функция-член interrupt() класса boost::thread
Отсутствует