Задание 7: семафоры
Требуемые условия завершения
Открыто с: суббота, 16 апреля 2016, 12:00
Срок сдачи: суббота, 30 апреля 2016, 23:00
Задания
Написать две программы (Alice и Bob), которые:
- Alice каждые полсекунды печатает на экран
'A'
- Bob каждые полсекунды печатает на экран
'B'
Сначала запустите эти две программы на разных терминалах, а потом — на одни терминале в фоновом режиме. Далее добавьте в обе программы семафоры для того, чтобы программы работали поочерёдно. Семафоры нужно выставлять через случайный промежуток времени (до 5 секунд максимально).
- Alice каждые полсекунды печатает на экран
Модифицировать задание на именованные каналы для работы сервера с несколькими клиентами (поочерёдно с каждым).
Полезные ссылки
- http://man7.org/linux/man-pages/man7/sem_overview.7.html
- http://habrahabr.ru/post/122108/#part_semaphore
Полезные заголовки
#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>
Полезные функции
Открытие или создание семафора:
sem_t *sem_open(const char *name, int oflag); sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
Закрытие семафора:
int sem_close(sem_t *sem);
Удаление семафора:
int sem_unlink(const char *name);
Получение текущего значения семафора:
int sem_getvalue(sem_t *sem, int *sval);
Увеличение значения семафора:
int sem_post(sem_t *sem);
Уменьшение значения семафора:
int sem_wait(sem_t *sem);
Уменьшение значения семафора в неблокирующем режиме:
int sem_trywait(sem_t *sem);