В каждой операционной системе потоковые решения реализовались по своему и имели свои особенности. Поскольку каждая операционная система имела собственные функции доступа к механизмам потоков, то межплатформенное программирование было большой головной болью для большинства разработчиков. В этой связи, в стандарт POSIX был введен отдельный раздел (POSIX.1c), посвященный именно потоковому программированию. POSIX определяет набор интерфейсных функций, который должен поддерживаться в POSIX-совместимыми операционными системами.
На данный момент, практически все известные ОС поддерживают стандарт POSIX, что упрощает процесс разработки межплатформенного программного обеспечения. В частности, как это не странно звучит, ОС MS Windows, также имеет поддержку POSIX стандартов.
Не является исключением и ОС FreeBSD, которая полностью поддерживает POSIX-потоки. Интерфейс потоковых функций описан в файле заголовков pthread.h и соотвествует стандарту POSIX.1с. Потоковые POSIX функции делятся на несколько групп:
- потоковые процедуры;
- процедуры свойств объектов;
- семафорные (mutex) процедуры;
- процедуры состояния переменных;
- процедуры блокировки на чтение/запись;
- процедуры потокового контекста;
- процедуры очистки.
На данный момент реализация на FreeBSD POSIX-потоков встроена в три системные библиотеки:
- Reentrant C-библиотека (libc_r, -lc_r);
- библиотека потоков POSIX (libpthread, -lpthread);
- 1:1 библиотека потоков (libthr, -lthr).
Все библиотеки содержат и безопасные (thread-safe) версии функций стандартной C библиотеки (libc, -lc), и потоковые функции. Потоковые приложения должны собираться с одной из этих библиотек. Надо заметить, что по умолчанию, большинство приложений собираются с libpthread библиотекой. Что часто является не лучшим с точки зрения производительности решением.
Нет комментариев