Создание семафора
Создание семафора
QNX поддерживает два типа семафоров — неименованные и именованные. Разница между ними заключается в том, что к именованному семафору можно обратиться из любого процесса в системе (или даже по сети QNET с другого сетевого хоста), поскольку такой семафор имеет ассоциированное с ним имя в файловой системе QNX. Необходимо помнить, что именованные семафоры, при прочих равных условиях, медленнее и требуют для своей работы запущенного в системе менеджера очередей сообщений POSIX (mqueue).
Для каждого типа семафоров существует своя группа функций, применение которых не должно смешиваться.
sem_init() и sem_destroy() — создание и разрушение неименованного семафора. При создании указывается параметр доступа из других потоков и начальное значение счетчика семафора. С неинициализированным семафором никаких операций проводить нельзя (это общее правило справедливо и для всех иных примитивов синхронизации). После разрушения семафора его необходимо повторно инициализировать для использования.
Обе функции возвращают 0 в случае успеха и -1 в случае ошибки. Код ошибки записывается в переменной errno. В частности, функция sem_init() может сигнализировать о следующих ошибках выполнения:
EAGAIN — в данный момент нет ресурсов для инициализации семафора;
EINVAL — начальное значение счетчика превышает SEM_VALUE_MAX;
EPERM — у процесса недостаточно привилегий для инициализации семафора;
ENOSPC — ресурсы, необходимые для инициализации, исчерпаны;
ENOSYS — функция sem_init() не поддерживается реализацией системы.
При вызове функции sem_destroy() может регистрироваться только одна ошибка:
EINVAL — неправильный описатель семафора.
sem_open() и sem_close() — открытие и закрытие именованного семафора (если отсутствует ранее созданный семафор с таким именем, то его создание). В вопросе подключения и отключения работа с именованным семафором аналогична работе с обычным файлом. Также для именованных семафоров существует операция sem_unlink(), аналогичная операции unlink() для обычного файла. В функцию sem_open() передается имя семафора, параметры открытия семафора и дополнительные параметры в случае создания семафора.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Дросселирование семафора для уменьшения состязательности между потоками
Дросселирование семафора для уменьшения состязательности между потоками Слишком большое количество потоков, соревнующихся между собой за право владения единственным ресурсом, например, мьютексом или объектом CS, могут стать причиной снижения производительности как в
Получение статуса семафора
Получение статуса семафора int sem_getvalue(sem_t* sem, int* value);Эта функция используется преимущественно для отладки операций над семафорами. По адресу, указанному в value, устанавливается текущее значение счетчика семафора. Поскольку значение счетчика семафора может измениться в
Использование семафора
Использование семафора Как уже говорилось выше, семафор является крайне гибким и эффективным средством синхронизации, особенно удобным для построения собственных средств планирования выполнения потоков. В этом смысле семафор представляет ценность не только как
Создание
Создание Глупо нырять с десятиметровой вышки, даже не научившись плавать. Точно так же неразумно пытаться сделать что-либо, напоминающее хорошую презентацию, не изучив все возможности предлагаемого инструмента. Начнем с алфавита: для создания очередного набора слайдов
Создание
Создание Начнем с самой простой и очевидной задачи – создание личного сайта «с нуля». Для этого необходимо направить свой браузер по вполне очевидному (надеюсь, к последней главе книги подход Google к адресации стал более чем понятен!) адресу http://sites.google.com, не забыв привычным
Создание
Создание Прежде чем приступить непосредственно к формированию веб-страниц, необходимо подготовить содержимое будущего сайта (текст, изображения и пр.). Ведь согласитесь, было бы глупо создавать сайт ни о чем. Поэтому будем считать, что вся необходимая для наполнения
Создание маски
Создание маски О масках мы уже знаем из главы 21. В терминологии канвы так называется особая фигура, задающая своего рода "окно", сквозь которое будет видна часть графики, нарисованной на канве. Вся графика, не попадающая в это "окно", будет скрыта. При этом сама маска на канву
5.4. Создание расписаний
5.4. Создание расписаний Механизм расписаний Linux (UNIX) предоставляет удобные и мощные средства для обслуживания системы. Например, можно создать расписание резервирования данных в нерабочее время или обновления системы через Интернет.Для запуска команд по расписанию
26.6.3. Контроль семафора
26.6.3. Контроль семафора Для контроля семафора используется системный вызов semctl():int semctl(int semid, int semnum, int cmd, union semun arg);Первый аргумент — это идентификатор семафора, второй — номер семафора во множестве семафоров (нумерация начиняется с 0). В отличие от очереди сообщений, где
Инициализация значения семафора
Инициализация значения семафора В комментариях к исходному коду в издании этой книги 1990 года неправильно утверждалось, что значения семафоров набора инициализируются нулем при вызове semget с созданием нового семафора. Хотя в некоторых системах это действительно
Создание рисунков
Создание рисунков При создании рисунка могут использоваться различные стандарты. Иногда они диктуются государственными и отраслевыми стандартами или нормами предприятия, иногда – требованиями заказчика. Ключевой момент как для непосредственных исполнителей, так и
Создание блока
Создание блока Описание блока можно создать различными способами:• сгруппировать объекты в текущем рисунке;• сохранить блок в отдельном файле;• создать файл с чертежом и вставлять его в качестве блока в другой чертеж;• добавлять функции динамического изменения в