Семафори та м'ютекси
Начальное значение семафора задается при его инициализации с помощью функции sem_init (). Создать переменную типа int, которая будет выступать в качестве дескриптора сокета. Назначение обработчика сигнала с помощью функции sigaction (). Привязать сокет к адресу и порту с помощью функции bind (). Принимать соединения с помощью функции accept (). Определение функции — обработчика сигнала… Читати ще >
Семафори та м'ютекси (реферат, курсова, диплом, контрольна)
Для обеспечения безопасности доступа выполняющихся потоков к разделяемым переменным, коими являются, например, переменные состояния систем журналирования и безопасности, используется механизм взаимоблокировки потоков с помощью объекта ядра — мьютекса.
Мьютекс представляет собой переменную типа pthread_mutex_t, к которой применимы две операции:
pthread_mutex_lock — захват мьютекса; при применении этой операции к захваченному другим потоком мьютексу вызвавший поток блокируется до освобождения мьютекса.
pthread_mutex_unlock — освобождение мьютекса.
Для контроля числа одновременно обслуживаемых запросов в серверном модуле применяется объект ядра — семафор.
Семафор представляет собой переменную типа sem_t, к которой применимы две основных операции:
sem_wait — уменьшает на 1 текущее значение семафора; если текущее значение равно 0, поток блокируется;
sem_post — увеличивает на 1 значение семафора.
Начальное значение семафора задается при его инициализации с помощью функции sem_init ().
Сокеты
Сокет представляет собой объект, предоставляющий программный интерфейс к протоколу TCP/IP и являющийся конечной точкой подключения. Использование сокета ничем не отличается от использования операций ввода-вывода применительно к файловому дескриптору — к сокету применяются те же функции read () и write (), что и при файловом вводе-выводе. Существуют, однако, специфические функции send () и recv (), расширяющие функциональность стандартных read () и write (), но их использование не является обязательным.
Перед началом процесса передачи данных через сокет необходимо совершить ряд действий:
Создать переменную типа int, которая будет выступать в качестве дескриптора сокета.
Создать описатель адреса сокета — структуру типа sockaddr_in, — и заполнить ее поля в соответствии с адресом и портом, через которые планируется устанавливать соединение.
Создать объект «сокет» с помощью функции socket (). Значение, возвращенное функцией, присваивается дескриптору сокета.
Привязать сокет к адресу и порту с помощью функции bind ().
Начать прослушивание адреса и порта на предмет входящих соединений с помощью функции listen ().
Принимать соединения с помощью функции accept ().
Следует заметить, что процедура инициализации клиентского сокета выполняется несколько иначе и не рассматривалась в силу того, что разработанная программа не выступает в качестве клиента.
Сигналы
Контроль сигналов используется в программе для прекращения работы сервера. При поступлении определенного сигнала обнуляется переменная-условие, в результате чего цикл приема сообщений прерывается.
Установка некоторой функции в качестве обработчика сигнала производится следующим образом:
Определение функции — обработчика сигнала.
Создание и заполнение описателя параметров обработчика — структуры типа sigaction. Одно из полей описателя содержит адрес функции-обработчика.
Назначение обработчика сигнала с помощью функции sigaction ().