Синопсис
#include
#include
Параметр name - это запрашиваемая системная переменная. Функция возвращает значения, соответствующие стандарту POSIX IEEE Std. 1003.1-2001 для заданных системных переменных. Эти значения можно сравнить с константами, определенными вашей реализацией стандарта, чтобы узнать, насколько они согласуются между собой. Для ряда системных переменных существуют константы-аналоги, относящиеся к потокам, процессам и семафорам (см. табл. 4.8).
Если параметр name не действителен, функция sysconf () возвращает число -1и устанавливает переменную errno, свидетельствующую об ошибке. Однако для заданного параметра name предел может быть не определен, и функция может возвращать число -1 как действительное значение. В этом случае переменная errno не устанавливается. Необходимо отметить, что неопределенный предел не означает безграничность ресурса Это просто означает, что не определен максимальный предел и (при условии доступности системных ресурсов) могут поддерживаться более высокие предельные значения. Рассмотрим пример вызова функции sysconf ():
if(PTHREAD_STACK_MIN == (sysconf(_SC_THREAD_STACK_MIN))){
//...
}
Значение константы PTHREAD_STACK_MINсравнивается со значением, возвращаемым функцией sysconf (), вызванной с параметром _SC_THREAD_STACK_MIN.
Таблица4.8. Системные переменные и соответствующие им символьные константы
Переменная |
Значение |
Описание |
_SC_THREADS |
_POSIX_THREADS |
Поддерживает потоки |
_SC_THREAD_ATTR_ STACKADDR |
_POSIX_THREAD_ATTR_ STACKADDR |
Поддерживает атрибут адреса стека потока |
_SC_THREAD_ATTR_ STACKSIZE |
_POSIX_THREAD_ATTR_ STACKSIZE |
Поддерживает атрибут размера стека потока |
_SC_THREAD_STACK_ MIN |
PTHREAD_STACK_MIN |
Минимальный размер стека потока в байтах |
_SC_THREAD_THREADS_MAX |
PTHREAD_THREADS MAX |
Максимальное количество потоков на процесс |
_SC_THREAD_KEYS_MAX |
PTHREAD_KEYS_MAX |
Максимальное количество ключей на процесс |
_SC_THREAD_PRIO_INHERIT |
_POSIX_THREAD_PRIO_ INHERIT |
Поддерживает опцию наследования приоритета |
_SC_THREAD_PRIO |
_POSIX THREAD_PRIO |
Поддерживает опцию приоритета потока |
_SC_THREAD_PRIORITY_ SCHEDULING |
_POSIX_THREAD_PRIORITY_SCHEDULING |
Поддерживает опцию планирования приоритета потока |
_SC_THREAD_PROCESS_SHARED |
_POSIX_THREAD_PROCESS_SHARED |
Поддерживает синхронизацию на уровне процесса |
_SC_THREAD_SAFE_ FUNCTIONS |
_POSIX_THREAD_SAFE_FUNCTIONS |
Поддерживает функции безопасности потока |
_SC_THREAD_ DESTRUCTOR_ ITERATIONS |
_PTHREAD_THREAD_DESTRUCTOR_ITERATIONS |
Определяет количество попыток, направленных на разрушение потоковых данных при завершении потока |
_SC_CHILD_MAX |
CHILD_MAX |
Максимальное количество процессов, разрешенных для UID |
_SC_PRIORITY_ SCHEDULING |
_POSIX_PRIORITY_ SCHEDULING |
Поддерживает планирование процессов |
_SC_REALTIME_ SIGNALS |
_POSIX_REALTIME_SIGNALS |
Поддерживает сигналы реального времени |
_SC_XOPEN_REALTIME_THREADS |
_XOPEN_REALTIME_ THREADS |
Поддерживает группу потоковых средств реального времени X/Open POSIX |
_SC_STREAM_MAX |
STREAM_MAX |
Определяет количество потоков данных, которые один процесс может открыть одновременно |
_SC_SEMAPHORES |
_POSIX_SEMAPHORES |
Поддерживает семафоры |
_SC_SEM_NSEMS_MAX |
SEM_NSEMS_MAX |
Определяет максимальное количество семафоров, которое может иметь процесс |
_SC_SEM_VALUE_MAX |
SEM_VALUE_MAX |
Определяет максимальное значение, которое может иметь семафор |
_SC_SHARED_MEMORY_ OBJECTS |
_POSIX_SHARED_MEMORY_OBJECTS |
Поддерживает объекты общей памяти |
Управление критическими разделами
Параллельно выполняемые процессы (или потоки в одном процессе) могут совместно использовать структуры данных, переменные или отдельные данные. Разделение глобальной памяти позволяет процессам или потокам взаимодействовать друг с другом и получать доступ к общим данным. При использовании нескольких процессов разделяемая глобальная память является внешней по отношению к ним. Внешнюю структуру данных можно использовать для передачи данных или команд между процессами. Если же необходимо организовать взаимодействие потоков, то они могут иметь доступ к структурам данных или переменным, являющимся частью одного и того же процесса, которому они принадлежат.
Читать дальше