Использование функции Pthread_detach в C

Процесс разработки мобильных приложений Программирование и разработка

Как мы все знаем, потоки являются основной частью любой обработки при работе в любой многопроцессорной среде. Потоки — это концепция, используемая и в программировании. Язык C предлагает API с именем «POSIX», позволяющий использовать потоки различного назначения, используемые в нашем фрагменте кода. Одним из таких потоков является функция «pthread_detach()», используемая для идентификации или указания потока как полностью отключенного. Кроме того, он обязательно освободит все ресурсы, используемые этим конкретным потоком. В этой статье мы будем обсуждать использование функции pthread_detach() в языке C с использованием системы Ubuntu 20.04.

Пример 01

Давайте рассмотрим первый пример, чтобы увидеть работу функции pthread_detach. Начните с терминала, запустив его, т.е. Ctrl+Alt+T. Мы будем использовать определенные команды для создания файла C, его открытия и выполнения. Самая первая команда — сгенерировать с ее помощью новый файл, т. е. touch. Этот новый файл нужно открыть в таком редакторе, в котором мы можем добавить в него код и внести в него изменения. Здесь мы использовали редактор «nano» через его команду.

Мы начали реализацию первого примера с некоторыми файлами

Мы начали реализацию первого примера с некоторыми файлами заголовков, которые необходимы для запуска этого кода. Наш код содержит две определяемые пользователем функции и 1 метод main(). Поскольку выполнение всегда начинается с метода main(), мы также начинаем объяснение с метода main(). Функция main() в первой строке называется методом «CreateT». Теперь управление передано функции «CreateT». Эта функция создает объект «th» для получения идентификатора потока с помощью встроенного изменяемого параметра pthread_t. Оператор printf показывает, что в данный момент мы находимся в основном потоке или 1 -й функции.

Функция «pthread_create» используется здесь для создания нового потока в этой функции с использованием имени другой функции, т. е. New, и привязки переменной «th» к идентификатору. Оператор «if» используется для проверки того, равны ли эта функция main() и другие вновь созданные потоки. Это было сделано путем приравнивания идентификаторов обоих потоков. Изменяемая ссылка «th» на новый поток и функция pthread_self() возвращает идентификатор функции «CreateT». Если оба потока совпадают, будет напечатано «потоки одинаковы»; в противном случае «потоки не совпадают». Функция pthread_join() гарантирует, что выполнение основного потока будет прекращено до тех пор, пока новый поток не будет выполнен и не завершится. Теперь управление полностью передано New thread.

Читайте также:  Чтение определенной страницы из файла PDF в Python

В New thread используется функция сна. Итак, система будет спать 10 секунд, а после этого будет происходить дальнейшее выполнение. Функция pthread_detach() предназначена для полного отключения потока New от вызывающей его функции, т. е. «CreateT». Здесь pthread_self() используется для определения идентификатора «Нового потока» для отсоединения. Оператор printf покажет, что этот поток функции сейчас завершится. Система снова будет спать в течение следующих 10 секунд, используя тот же метод «sleep()» из C. Функция pthread_exit() предназначена для быстрого завершения текущего потока, который сейчас является «Новым». Теперь управление возвращается функции «CreateT». Вернувшись в этот основной поток, мы обнаружили новый оператор printf, показывающий, что мы вернулись в функцию «CreateT». В настоящее время, нам нужно использовать другую функцию pthread_exit(), чтобы также закрыть поток «CreateT» и вернуть управление функции main(). Итак, мы сделали это до сих пор, и управление возвращено. Здесь программа заканчивается. Поскольку программа готова, нам нужно скомпилировать ее с помощью компилятора C в Ubuntu 20.04.

Вы должны убедиться, что компилятор C уже настроен на вашей конечной машине

Вы должны убедиться, что компилятор C уже настроен на вашей конечной машине. Мы использовали компилятор GCC в нашей оболочке. Итак, имя файла с ключевым словом «-lpthread» используется для компиляции кода, как показано на изображении ниже.

После компиляции кода мы должны выполнить его, чтобы увидеть результат

После компиляции кода мы должны выполнить его, чтобы увидеть результат. Команда для выполнения — «./a.out», как показано ниже. Когда мы выполнили файл кода, он запустил основную функцию и функцию main(), называемую функцией «CreateT». Оператор printf «CreateT» отобразил «Внутри основного потока» и создал новый поток с именем «Новый». Было выполнено сравнение обоих потоков, и оно возвращает, что оба потока не совпадают. Затем система засыпает на 10 секунд.

Через 10 секунд он присоединяется к созданному потоку New

Через 10 секунд он присоединяется к созданному потоку New. Новый поток был отсоединен от функции «CreateT» и отображал, что мы находимся в функции «Новый» поток. Система снова переходит в спящий режим на следующие 10 секунд и выходит из нового потока.

Теперь управление передано потоку «CreateT»

Теперь управление передано потоку «CreateT», и он выскочил так, что мы вернулись в основной поток. После завершения потока «CreateT» функция main() получает управление. Следовательно, программа завершается здесь успешно.

Читайте также:  10 лучших навыков DevOps-инженера

После завершения потока «CreateT» функция main

Пример 02

Давайте по-другому взглянем на пример функции pthread_detach в C. Мы начали наш код C с тех же заголовков библиотеки с ключевым словом #include, чтобы сделать наш код работоспособным. Определена 1 функция main() и 1 пользовательская функция с именем «Новая». Функция «Новый» будет использоваться как функция потока. Мы начинаем объяснение с метода main(). Изменяемая переменная pthead_t объявляет переменную «th» для получения идентификатора потока нового потока. Оператор printf показывает, что мы запустили основную функцию и переходим в спящий режим на 10 секунд, используя метод «sleep». Следующий printf показывает, что будет создана функция потока, и по этой причине до сих пор использовалась функция POSIX pthread_create().

«th» используется в качестве параметра функции создания нового потока для получения идентификатора нового потока. Функция pthread_join() предназначена для полной приостановки выполнения метода main() до тех пор, пока не начнет выполняться новый поток, т. е. New. Теперь запускается новая функция. Функция pthread_detach() полностью отделяет эту функцию от функции main(), забирая ее ресурсы. Функция pthread_Exit() гарантирует, что новый поток больше не будет выполняться. Поэтому его оператор printf не будет выполнен. Поток main() будет завершен после выполнения его функции pthread_exit().

используется в качестве параметра функции создания нового потока

Начнем с компиляции кода с помощью gcc. К счастью! Это было успешно.

Начнем с компиляции кода с помощью gcc

Итак, мы использовали ту же самую инструкцию «./a.out» здесь. Функция main() начала выполняться первой после вывода оператора печати. Теперь система спит в течение 10 секунд.

Итак, мы использовали ту же самую инструкцию

Через 10 секунд выполняется следующий оператор печати и отображается, что новый поток создан. Управление переходит к новому потоку, и он отсоединяется от функции main() без выполнения ее оператора printf. Поэтому наш вывод выглядит примерно так, как показано ниже.

Через 10 секунд выполняется следующий оператор печати

Вывод

Итак, речь шла об использовании POSIX-функции pthread_detach в C для полного отсоединения потока от основного вызывающего потока. Сохраняя простоту и кратко объясняя иллюстрации, мы постарались сделать все возможное, чтобы вы поняли эти примеры, реализованные в Ubuntu 20.04.

Оцените статью
bestprogrammer.ru
Добавить комментарий