Найти в Дзене
Old Programmer

Многозадачность в Linux. Язык C. Статья 15. Семафоры

Здравствуйте вам на канале Old Programmer о программировании и программистах. Тематическое оглавление канала здесь. А тут собраны все ссылки по C/C++. Здесь перечень ссылок на ресурсы моего канала, посвященные многозадачности в Linux. Программа с семафором Мы продолжаем тему синхронизации, начатую в предыдущей статье. Сегодня мы покажем, как решается проблема синхронизации с помощью семафоров. Мы видоизменили программу sem4000.py так чтобы оба процесса в ней выводили данные синхронно. Теперь программа sem4010.py выводит данные парами (ср. результаты предыдущей статьи). AAaaBBbbCCccDDddEEeeFFffGGggHHhhIIiiJJjjKKkkLLllMMmmNNnnOOooPPppQQqqRRrrSSssTTttUUuuVVvvWWwwXXxxYYyyZZz Для синхронизации процессов используется объект ядра, называемый семафором. С помощью семафора можно синхронизировать работу процессов или потоков. Функции управления семафором Разберем функции, которые мы используем для управления семафором в программе sem4010.c. Функция semget(). С помощью этой функции создается
Оглавление

Здравствуйте вам на канале Old Programmer о программировании и программистах. Тематическое оглавление канала здесь. А тут собраны все ссылки по C/C++. Здесь перечень ссылок на ресурсы моего канала, посвященные многозадачности в Linux.

Программа с семафором

Мы продолжаем тему синхронизации, начатую в предыдущей статье. Сегодня мы покажем, как решается проблема синхронизации с помощью семафоров.

Мы видоизменили программу sem4000.py так чтобы оба процесса в ней выводили данные синхронно. Теперь программа sem4010.py выводит данные парами (ср. результаты предыдущей статьи).

AAaaBBbbCCccDDddEEeeFFffGGggHHhhIIiiJJjjKKkkLLllMMmmNNnnOOooPPppQQqqRRrrSSssTTttUUuuVVvvWWwwXXxxYYyyZZz

Для синхронизации процессов используется объект ядра, называемый семафором. С помощью семафора можно синхронизировать работу процессов или потоков.

Функции управления семафором

Разберем функции, которые мы используем для управления семафором в программе sem4010.c.

Функция semget(). С помощью этой функции создается новый семафор (массив семафоров) или возвращается идентификатор уже существующего.

  • 1-й параметр - целое число. Оно позволяет разным процессам обращаться к одному и тому же семафору. Это число является аналогом имени файла в функции открытия файлов.
  • 2-параметр - обычно равен 1, так как обычно создается один семафор, но можно создавать массив семафоров.
  • 3 -й параметр - флаги семафора, часть из которых совпадает с флагами при создании файла.

Функция semctl(). Функция управления существующим семафором.

  • 1-й параметр - идентификатор семафора, который возвращается функцией semget().
  • 2-й параметр - номер семафора. Обычно 0 (так как обычно он всего один).
  • 3-й параметр - предпринимаемое действие. Предпринимаемое действие.
  • 4-й параметр - объединение union.

Функция semop(). Изменение значений семафора или ожидания, когда станет возможно изменить значение семафора и войти в критическую область.

  • 1-й параметр - идентификатор семафора, который возвращается функцией semget().
  • 2 -й параметр - структура, которая в частности (второй элемент) показывает на сколько нужно изменить счетчик семафора.
  • 3 -й параметр - количество семафоров в массиве, т.е. чаще все 1.

Мы не заканчиваем работу с семафорами. В частности в ближайшее время рассмотрим использование этого объекта для работы с потоками.

Многозадачность это наше все. Не забывайте подписываться на мой канал о программировании и программистах Old Programmer. И не забывайте ставить 'like'.

Фрагмент программы sem4010.py
Фрагмент программы sem4010.py