Предположим, есть основной поток 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.