Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мои шпоры ОСиСП(1).doc
Скачиваний:
30
Добавлен:
26.09.2019
Размер:
1.63 Mб
Скачать

Int pthread_setschedparam(pthread_t tid, int policy,

const struct sched_param *param);

Int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param);

// позволяет получить приоритет любого существующего потока. возвращает 0 - в случае успешного завершения - или другое значение - в случае ошибки.

Поток, как и процесс, может принимать различные сигналы: pthread_kill(tid, sig);

посылает сигнал sig потоку, обозначенному tid, который должен быть потоком в пределах того же самого процесса, что и вызывающий поток. Аргумент sig должен быть действительным сигналом некоторого типа, определенного для функции signal() в файле < signal.h>. Если sig имеет значение 0, выполняется проверка ошибок, но сигнал реально не посылается. Таким образом можно проверить правильность tid. Функция возвращает 0 - в случае успешного завершения - или другое значение - в случае ошибки.

Функция pthread_sigmask() может использоваться для изменения или получения маски сигналов вызывающего потока:

Int pthread_sigmask(int how, const sigset_t *new, sigset_t *old);

how определяет режим смены маски. Он принимает значения следующих констант:

SIG_SETMASK - заменяет текущую маску сигналов новой, при этом new указывает новую маску сигналов;

SIG_BLOCK - добавляет новую маску сигналов к текущей, при этом new указывает множество блокируемых сигналов;

SIG_UNBLOCK - удаляет new из текущей маски сигналов, при этом new указывает множество сигналов для снятия блокировки.

Если значение new равно NULL, то значение how не играет роли, и маска сигналов потока не изменяется. Чтобы узнать о блокированных в данный момент сигналах, аргумент new устанавливают в NULL. Переменная old указывает, где хранится прежняя маска сигналов, если ее значение не равно NULL. возвращает 0 - в случае успешного завершения - или другое значение - в случае ошибки.

По сравнению с процессами, потоки управления характеризуются двумя особенностями:

- на порядок меньшими накладными расходами на обслуживание;

- существенно более тесным взаимодействием в общем адресном пространстве.

Очевидно, чтобы быть практически полезными, средства синхронизации, специально ориентированные на потоки управления, должны быть оптимизированы с учетом обеих отмеченных особенностей. К числу таких средств, присутствующих в стандарте POSIX-2001, принадлежат мьютексы, переменные условия, блокировки чтение-запись, спин-блокировки и барьеры.

Мьютекс – это синхронизирующий объект, использование которого позволяет множеству потоков управления упорядочить доступ к разделяемым данным. Название этого средства синхронизации отражает его функциональность – взаимное исключение (mutual-exclusion). Поток захватывает мьютекс в монопольное владение и остается владельцем, пока сам же его не освободит.

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

Блокировки чтение-запись (много читателей или один писатель) в каждый момент времени позволяют нескольким потокам управления одновременно иметь к данным доступ на чтение или только одному потоку – доступ на запись. Естественно, подобные блокировки обычно применяют для защиты данных, которые читаются чаще, чем изменяются.

Спин-блокировки представляют собой низкоуровневое средство синхронизации.

Как и мьютексы, они предназначены для упорядочения доступа множества потоков управления к разделяемым данным.

Барьеры предназначены для синхронизации множества потоков управления в определенной точке их выполнения.

Средства синхронизации могут использоваться для достижения двух существенно разных целей:

  • захват (как правило, на короткое время) разделяемого объекта для защиты критического интервала;

  • ожидание (долгое или даже потенциально неограниченное) наступления некоторого события, выполнения некоторого условия.

Мьютексы и блокировки можно отнести к первой из выделенных категорий, переменные условия и барьеры – ко второй. Вообще говоря, средства синхронизации потоков управления можно использовать не только в рамках одного процесса, но и среди множества процессов, расположенных в разделяемой, доступной на запись памяти, соответствующим образом инициализированной. Со средствами синхронизации потоков управления ассоциируются атрибуты и атрибутные объекты, которые можно опрашивать и/или изменять аналогично тому, как это делается для самих потоков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]