Да предположим, че има основна нишка 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 система. Ние просто ще отидем в нашата папка Home, ще създадем празен документ и ще го наречем Mutex.cpp. След като нашите .cpp файл е създаден, ние ще го отворим с текстовия редактор. След това ще въведем кода, показан на изображенията по-долу, в нашия .cpp файл:
Кодът, показан в двете изображения по-горе, създаде две различни нишки. Първата нишка съответства на задача №1, докато втората нишка съответства на задача №2. След това създадохме примерна функция, наречена „Mutex функция“. В тази функция първо заключваме променливата за заключване Mutex и тя ще бъде отключена само след като нишка # 1 завърши задача # 1. По същия начин променливата за заключване Mutex отново ще бъде заключена от нишка # 2, докато не завърши задача # 2. Тази „Mutex функция“ се извиква от функцията „main“.
Стъпка 2: Компилиране на програмата C в Linux Mint 20
След като запазите .cpp файл, сега ще го компилираме през терминала Linux Mint 20 със следната команда:
$ gcc -o Mutex Mutex.cpp -pthread
Тук „Mutex“, след флага „-o“, се отнася до името на обектния файл, който ще бъде създаден, докато „Mutex“.cpp ”е името на оригинала .cpp файл. Флагът “-pthread” е необходим за компилиране на тази програма, защото тази програма е написана, докато се използва библиотеката “pthread”. Ако пропуснете този флаг, вашата програма няма да бъде компилирана и ще покаже някои грешки. Успешната компилация на нашата .cpp файлът няма да създаде никакви съобщения на терминала, както е показано на изображението по-долу:
Стъпка # 3: Стартиране на програмата C в Linux Mint 20
След като обектният файл с име „Mutex“ е създаден, можем да го стартираме със следната команда:
$ ./ Мутекс
В изхода на нашия Mutex.cpp програма, ще забележите, че първата задача 1 е стартирала, което означава, че нишка # 1 е получила заключването Mutex. След това Job 1 завършва след известно време. След това стартира Job 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.