Припустимо, існує основний потік 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.