Освобождение мьютекса
Освобождение мьютекса
int pthread_mutex_unlock(pthread_mutex_t* mutex);
Функция pthread_mutex_unlock() освобождает мьютекс, на который ссылается переменная mutex. Вызвавший поток должен быть владельцем мьютекса. Если есть потоки, блокированные в ожидании освобождения мьютекса, то поток с наивысшим приоритетом (или при равных приоритетах дольше всех ждавший) выходит из блокированного состояния и становится владельцем мьютекса.
Для мьютексов, разрешающих рекурсивный захват, функция освобождения должна вызываться столько же раз, сколько и функция захвата.
Возвращаемые значения:
EOK — успешное завершение;
EINVAL — переменная, на которую указывает mutex, не является инициализированным объектом — мьютексом;
EPERM — вызвавший поток не является владельцем мьютекса.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
3.2.1.3. Освобождение памяти: free()
3.2.1.3. Освобождение памяти: free() Когда вы завершили использование памяти, «верните ее обратно», используя функцию free(). Единственный аргумент является указателем, предварительно полученным с использованием другой функции выделения. Можно (хотя это бесполезно) передать
Параметры мьютекса
Параметры мьютекса Параметры мьютекса хранятся в структуре pthread_mutexattr_t, которая определена типом sync_attr_t. Эта структура должна быть, создана и определена до инициализации мьютекса, после чего может быть переопределена и использована для других объектов типа
Определение типа мьютекса
Определение типа мьютекса int pthread_mutexattr_settype( pthread_mutexattr_t* attr, int type);int pthread_mutexattr_gettype( const pthread_mutexattr_t* attr, int* type);В версиях QNX 6.2.1 и 6.3 предусматривается создание мьютексов следующих типов:• PTHREAD_MUTEX_NORMAL — для этого типа не проводится контроль «мертвой блокировки» (deadlock) в
Освобождение параметров
Освобождение параметров int pthread_mutexattr_destroy(pthread_mutexattr_t* attr);Вызов разрушает ранее применявшийся объект - атрибутную запись мьютекса, после чего она уже не может более использоваться для инициализации мьютекса без предварительного выполнения вызова pthread_mutexattr_init().На этом
Инициализация мьютекса
Инициализация мьютекса int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr);Структура данных pthread_mutex_t определена в файле <pthread.h> (производный тип от типа sync_t, который в свою очередь определен в файле <target_nto.h>) и имеет следующий вид:struct _sync_t { /* Счетчик для рекурсивного
Захват мьютекса
Захват мьютекса Захват мьютекса может производиться тремя разными функциями, в основе которых лежит функция из native QNX API SyncMutexLock().Простой захватint pthread_mutex_lock(pthread_mutex_t* mutex);Функция захватывает мьютекс, на который ссылается mutex. Если мьютекс уже захвачен другим потоком, то
Пример применения мьютекса
Пример применения мьютекса Модернизируем наш пример из раздела, посвященного использованию семафора для случая множества потоков источников и приемников данных. Проблема заключается в том, что когда несколько потоков одновременно попытаются вызвать функцию push() или
Освобождение блокировки
Освобождение блокировки int pthread_rwlock_unlock(pthread_rwlock_t* rwl);Функция освобождает захваченный любым образом объект блокировки чтения/записи. Если объект был захвачен в режиме множественного использования (блокировки по чтению), то количество его освобождений должно равняться
Захват и освобождение спинлока
Захват и освобождение спинлока int pthread_spin_lock(pthread_spinlock_t* spinner);int pthread_spin_trylock(pthread_spinlock_t* spinner);Это функции захвата и попытки захвата крутящейся блокировки соответственно. Как и для мьютекса, если объект spinner в момент захвата свободен, то поток, вызвавший одну из этих функций,
4.1.3 Освобождение индексов
4.1.3 Освобождение индексов В том случае, когда ядро освобождает индекс (алгоритм iput, Рисунок 4.4), оно уменьшает значение счетчика ссылок для него. Если это значение становится равным 0, ядро переписывает индекс на диск в том случае, когда копия индекса в памяти отличается от
6.5.6 Освобождение области
6.5.6 Освобождение области Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение
8.6.2. Освобождение дискового пространства
8.6.2. Освобождение дискового пространства Теперь вы знаете, как определить, сколько места займет на диске устанавливаемый пакет, и каков объем свободного пространства на диске. Рассмотрим, что можно сделать, если свободного места не достаточно. Надо заметить, что при
Освобождение объекта Graphics
Освобождение объекта Graphics Если вы внимательно читали несколько последних страниц, то могли заметить, что в некоторых примерах программного кода непосредственно вызывается метод Dispose() объекта Graphics, тогда как в других примерах этого не делается. Поскольку тип Graphics
5.2.1. Выделение и освобождение семафоров
5.2.1. Выделение и освобождение семафоров Функции semget() и semctl() выделяют и освобождают семафоры, функционируя подобно функциям shmget() и shmctl(). Первым аргументом функции semget() является ключ, идентифицирующий группу семафоров; второй аргумент — это число семафоров в группе;
Освобождение места на диске
Освобождение места на диске Несмотря на внушительные размеры современных жестких дисков, количество свободного места на них имеет тенденцию уменьшаться до нуля, и тогда система сообщит, что свободное место на диске почти закончилось и его необходимо очистить (рис. 8.27).