Приложение В. Краткое сравнение библиотек для написания параллельных программ

Поддержка параллелизма и многопоточности в языках программирования и библиотеках не является чем-то новым, хотя включение ее в стандарт С++ — действительно новшество. Например, в 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
Отсутствует
Загрузка...