Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Семафори та м'ютекси

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Начальное значение семафора задается при его инициализации с помощью функции 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 ().

Показати весь текст
Заповнити форму поточною роботою