Программирование на C

Posix Mutex с программированием на C

Posix Mutex с программированием на C
Сегодняшняя статья будет посвящена использованию Posix Mutex с программированием на C в Linux Mint 20. Однако, прежде чем перейти к нашему основному примеру, мы сначала хотели бы прояснить несколько терминологий, чтобы вы могли легко понять примерный сценарий, которым мы поделимся с вами. В операционных системах широко используется концепция многопоточности. Потоки - это в основном подпроцессы, которым делегированы разные задачи. Вы можете рассмотреть следующий пример, чтобы понять работу потоков.

Предположим, есть основной поток A, задача которого - вычислить сумму переменных w и y, где w = x + 1, а y = z + 2. Значения переменных x и z должны быть получены пользователем. В этом сценарии мы можем создать два потока, B и C. Задача потока B будет заключаться в том, чтобы взять значение переменной x от пользователя, увеличить его на 1 и сохранить в переменной w. Задача потока C будет заключаться в том, чтобы взять значение переменной z от пользователя, увеличить его на 2, а затем сохранить в переменной y. Наконец, оба этих потока передадут эти результаты основному потоку A, который затем вычислит их сумму и отобразит окончательный результат.

Если бы мы не создавали никаких потоков в этом сценарии, тогда все задачи были бы выполнены основным потоком A за гораздо большее время. Таким образом, потоки могут эффективно выполнять ваши вычисления без лишних задержек. Однако есть очень серьезная проблема с использованием потоков, известная как «состояние гонки». Это ситуация, в которой два потока пытаются получить доступ и изменить одни и те же данные, что делает их несогласованными. Как программист, наша цель должна заключаться в том, чтобы максимально изящно избегать состояний гонки.

Наиболее часто используемым решением для предотвращения состояний гонки является использование Mutex. Mutex означает взаимное исключение и в основном предоставляет нам механизм блокировки, который предотвращает доступ и изменение критических данных более чем одним пользователем одновременно. Таким образом обеспечивается согласованность данных. Posix - это в основном библиотека, которая предоставляет нам различные встроенные функции, которые значительно упрощают реализацию потоков и Mutex. В следующем примере мы попытаемся изучить использование Posix Mutex с программированием на C в Linux Mint 20.

Пример использования Posix Mutex с программированием на C в Linux Mint 20

Мы выполним следующие три шага, чтобы познакомить вас с использованием Posix Mutex с программированием на C в Linux Mint 20.

Шаг №1: Создание программы, демонстрирующей использование Posix Mutex с программированием на C в Linux Mint 20

Прежде всего, мы создадим .cpp в нашей системе Linux Mint 20. Мы просто перейдем в нашу домашнюю папку, создадим пустой документ и назовем его Mutex.cpp. Когда-то наш .cpp файл создан, откроем его текстовым редактором. После этого мы введем код, показанный на изображениях ниже, в наш .cpp файл:

Код, показанный на двух изображениях выше, создает два разных потока. Первый поток соответствует заданию №1, а второй поток соответствует заданию №2. Затем мы создали образец функции под названием «Mutex Function». В этой функции мы сначала блокируем переменную блокировки Mutex, и она будет разблокирована только после того, как поток №1 завершит задание №1. Точно так же переменная блокировки Mutex снова будет заблокирована потоком №2, пока он не завершит задание №2. Эта «функция мьютекса» вызывается «основной» функцией.

Шаг # 2: компиляция программы на C в Linux Mint 20

После сохранения .cpp, теперь мы скомпилируем его через терминал Linux Mint 20 с помощью следующей команды:

$ gcc -o Мьютекс Мьютекс.cpp -pthread

Здесь «Mutex» после флага «-o» относится к имени объектного файла, который будет создан, тогда как «Mutex.cpp »- это имя оригинала .cpp файл. Флаг «-pthread» необходим для компиляции этой программы, потому что эта программа написана с использованием библиотеки «pthread». Если вы опустите этот флаг, ваша программа не будет скомпилирована и выдаст некоторые ошибки. Успешная компиляция нашего .cpp файл не будет создавать никаких сообщений на терминале, как показано на изображении ниже:

Шаг # 3: Запуск программы на C в Linux Mint 20

После создания объектного файла с именем «Mutex» мы можем запустить его, используя следующую команду:

$ ./ Мьютекс

На выходе нашего Mutex.cpp, вы заметите, что запущено первое задание 1, что означает, что поток № 1 получил блокировку мьютекса. После этого работа 1 завершается через некоторое время. Затем запускается задание 2, что означает, что поток №2 получил блокировку мьютекса. Он будет разблокирован только после завершения задания 2.

Заключение

В этой статье подробно объясняется использование Posix Mutex с программированием на C в Linux Mint 20. Mutex можно очень эффективно использовать, чтобы избежать состояний гонки во время программирования, просто включив библиотеку Posix или pthread в наш код на C. Это не только обеспечит согласованность данных, но и сделает обработку намного более эффективной.

Лучшее в использовании библиотеки Posix в Linux заключается в том, что нам даже не нужно устанавливать для нее какое-либо специализированное программное обеспечение, пакеты или компилятор. Код C может быть просто написан в любом текстовом редакторе по умолчанию в Linux и может быть скомпилирован и запущен с компиляторами gcc или g ++ по умолчанию. Это дополнительный уровень простоты и удобства использования Posix Mutex с программированием на C в Linux Mint 20.

Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...