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, який потім обчислить їх суму і відобразить кінцевий результат.

Якби ми не створили жодного потоку в цьому сценарії, тоді всі завдання виконувались би основним потоком А за набагато більший час. Таким чином, потоки можуть ефективно виконувати ваші обчислення без зайвих затримок. Однак є дуже серйозне занепокоєння щодо використання потоків, яке відоме як "стан перегонів". Це ситуація, коли дві нитки намагаються отримати доступ і змінити ці самі дані, отже, залишаючи їх непослідовними. Як програміст, нашою метою повинно бути уникнення расових умов найбільш витонченим чином.

Найчастіше застосовуваним рішенням для уникнення перегонових умов є використання 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”. У цій функції ми спочатку блокуємо змінну блокування Mutex, і вона буде розблокована лише після того, як потік # 1 закінчить завдання No1. Подібним чином, змінна блокування Mutex знову буде заблокована потоком # 2, доки не закінчить завдання №2. Ця „функція мутексу” називається функцією „main”.

Крок 2. Складання програми C на Linux Mint 20

Після збереження .cpp, тепер ми скомпілюємо його через термінал Linux Mint 20 за допомогою такої команди:

$ gcc -o Mutex Mutex.cpp -pthread

Тут “Mutex” після прапора “-o” посилається на ім’я об’єктного файлу, який буде створений, тоді як “Mutex”.cpp ”- назва оригіналу .cpp файл. Прапор “-pthread” необхідний для компіляції цієї програми, оскільки ця програма написана під час використання бібліотеки “pthread”. Якщо ви пропустите цей прапорець, ваша програма не буде скомпільована і матиме деякі помилки. Успішна компіляція нашого .Файл cpp не видасть жодних повідомлень на терміналі, як показано на малюнку нижче:

Крок No3: Запуск програми C на Linux Mint 20

Після створення об’єктного файлу з назвою “Mutex” ми можемо запустити його, використовуючи таку команду:

$ ./ Мутекс

На виході нашого Mutex.cpp, ви помітите, що спочатку почалося завдання 1, а це означає, що потік №1 отримав блокування Mutex. Після цього робота 1 закінчується через деякий час. Потім починається завдання 2, що означає, що потік №2 отримав замок Mutex. Він буде розблокований лише після завершення завдання 2.

Висновок

У цій статті було поглиблене пояснення використання Posix Mutex з програмуванням на C в Linux Mint 20. Mutex можна використовувати дуже ефективно, щоб уникнути перегонових умов під час програмування, просто включивши бібліотеку Posix або pthread до нашого коду C. Це не тільки забезпечить узгодженість даних, але й зробить обробку набагато ефективнішою.

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

HD Remastered Games для Linux, які раніше ніколи не випускали Linux
Багато розробників і видавців ігор випускають HD-ремастер старих ігор, щоб продовжити життя франшизи. Будь ласка, шанувальники просять сумісність із с...
Як використовувати AutoKey для автоматизації ігор Linux
AutoKey - це утиліта автоматизації робочого столу для Linux та X11, запрограмована на Python 3, GTK та Qt. Використовуючи його сценарії та функціональ...
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...