int pthread_attr_setscope(pthread_attr_t *attr,
int contentionscope);
int pthread_attr_getscope(
const pthread_attr_t *restrict_attr,
int *restrict contentionscope) ;
Функция pthread_attr_setscope() устанавливает член объекта атрибутов потока (заданного параметром attr), связанный с областью конкуренции. Область конкуренции потока будет установлена равной значению параметра contentionscope, который может принимать следующие значения.
PTHREAD_SCOPE_SYSTEM Область конкуренции системного уровня PTHREAD_SCOPE_PROCESS Область конкуренции уровня процесса
Функция pthread_attr_getscope() возвращает атрибут области конкуренции из объекта атрибутов потока, заданного параметром attr. При успешном выполнении значение области конкуренции сохраняется в параметре contentionscope. Обе функции при успешном выполнении возвращают число 0 , в противном случае — код ошибки-
Использование функции sysconf ()
Знание пределов, устанавливаемых системой на использование ресурсов, позволит вашему приложению эффективно управлять ресурсами. Например, максимальное количество потоков, приходящихся на один процесс, составляет верхнюю границу числа рабочих потоков, которое может быть создано процессом. Функция sysconf () используется для получения текущего значения конфигурируемых системных пределов или опций
Синопсис
#include <unistd.h>
#include <limits.h>
Параметр 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 | Поддерживает опцию планирования приоритета потока |