Объектно-ориентированный интерфейс

В API библиотеки нитей реализован объектно-ориентированный интерфейс. Программист работает с объектами с помощью указателей и других универсальных идентификаторов; детали реализации объекта скрыты от него.

Благодаря этому обеспечивается переносимость программ с несколькими нитями для систем, поддерживающих эту библиотеку нитей, а также возможность переноса данных между разными версиями AIX с перекомпиляцией только этих программ. Хотя определения некоторых типов данных содержатся в библиотечном файле заголовка (pthread.h), программы не должны работать с содержимым структур непосредственно, на основе этих определений, поскольку они зависят от реализации. Для работы с объектами всегда должны применяться стандартные процедуры библиотеки нитей.

В библиотеке нитей в основном используются следующие типы объектов (непрозрачных типов данных): нити, взаимные блокировки, блокировки чтения-записи и условные переменные. У этих объектов есть атрибуты, задающие свойства объектов. При создании объекта необходимо задать его атрибуты. В библиотеке нитей эти атрибуты создания сами являются объектами, называемыми объектами атрибутов нитей.

В библиотеке нитей предусмотрены средства для работы со следующими парами объектов:

  • Объекты нитей и их атрибутов
  • Объекты взаимных блокировок и их атрибутов
  • Объекты условных переменных и их атрибутов
  • Блокировки для чтения и записи

При создании объекта атрибутов их значения устанавливаются по умолчанию. Затем можно изменить значения отдельных атрибутов с помощью функций. Это позволяет гарантировать, что введение новых атрибутов и изменение их реализации не повлияет на программу с несколькими нитями. Следовательно, объект атрибутов можно использовать для создания одного или нескольких объектов, а затем уничтожить, причем уничтожение объекта атрибутов никак не отразится на объектах, созданных с его помощью.

Объекты атрибутов позволяют также работать с классами объектов. Для каждого класса объектов можно определить один объект атрибутов. Для создания экземпляра класса объекта следует создать такой объект с помощью объекта атрибутов класса.