Задание 7: семафоры

Задания

  1. Написать две программы (Alice и Bob), которые:

    • Alice каждые полсекунды печатает на экран 'A'
    • Bob каждые полсекунды печатает на экран 'B'

    Сначала запустите эти две программы на разных терминалах, а потом — на одни терминале в фоновом режиме. Далее добавьте в обе программы семафоры для того, чтобы программы работали поочерёдно. Семафоры нужно выставлять через случайный промежуток времени (до 5 секунд максимально).

  2. Модифицировать задание на именованные каналы для работы сервера с несколькими клиентами (поочерёдно с каждым).

Полезные ссылки

Полезные заголовки

#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);