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

Другие инструменты разработки Программирование и разработка

Возможно, вы сталкивались со многими ситуациями, когда ваша программа завершалась без уведомления. Язык C также позволяет вам делать это самостоятельно. Для этого можно использовать функцию POSIX pthread_cancel(). Этот метод POSIX может просто отменить поток или функцию, используя ее идентификатор. Начните с чистого листа, используя функцию «pthread_cancel()» в коде C. Чтобы запустить его, нам нужен файл кода C, чтобы добавить нашу программу. Для этой цели в оболочке Linux можно использовать вечное и простое ключевое слово «touch». Мы дали имя «cancel.c» файлу с расширением C. Этот файл нужно где-то открыть для создания кода, т.е. в любом редакторе вроде vim или nano. Мы используем редактор «GNU Nano», как показывает команда.

в любом редакторе вроде vim или nano

Пример 1

Вы должны создать такой же код, как показано на изображении, прикрепленном ниже. Этот код был инициирован добавлением файлов заголовков для языка C. Без этих заголовков наш код будет бесполезен. Затем в системе будут использоваться стандартный вывод и ввод, и для использования его функций потока потребуется терминал с этими заголовками и библиотекой потоков POSIX. После этих файлов заголовков мы объясним этот код из его функции main(). Это потому, что выполнение программы начинается отсюда.

Таким образом, «pthred_t» используется здесь для инициализации объекта потока «th». Оператор печати показывает нам, что в настоящее время мы начинаем с функции main() и создаем из нее поток. Затем выполнение этого кода останавливается на 10 секунд, и код использует функцию «сна», чтобы заснуть на некоторое время. Основная функция создания потока называется «pthread_create» с использованием объекта потока «th» и имени функции, т. е. Thread. Теперь функция Thread начала выполняться. Новая функция Thread типа указателя принимает аргумент типа указателя. Эта функция просто использует метод «sleep», чтобы перевести вашу систему и выполнение в спящий режим или приостановить работу на 10 секунд.

Оператор printf этого потока сообщает нам, что в данный момент мы находимся в функции Thread, т. е. не в функции main(). Здесь появляется функция «pthread_cancel», которая использовала функцию «pthread_self()» для получения идентификатора потока для отмены выполнения текущего потока, т. е. Thread. Когда поток отменяется, управление переходит к функции main(). В основном методе здесь используется функция pthread_join POSIX, чтобы убедиться, что функция Thread завершается и забирает у нее все ресурсы. Функция сна заставит нашу систему снова заснуть на 10 секунд. Оператор printf команды main покажет, что мы вернулись к методу main() и теперь программа завершается. Теперь наша программа завершена и готова к использованию в командах для выполнения и компиляции.

Читайте также:  Привязка ввода формы Vue.js с опцией выбора

Компилятор «gcc» лучше всего подходит для работы в терминале Ubuntu

Компилятор «gcc» лучше всего подходит для работы в терминале Ubuntu. Итак, мы использовали его здесь для компиляции файла cancel.c POSIX.

При выполнении запускается метод main() и создает поток

При выполнении запускается метод main() и создает поток, т. е. Thread. Наша система спит в течение 10 секунд.

Управление передается функции Thread, и она показывает, что мы в данный момент находимся

 

Управление передается функции Thread, и она показывает, что мы в данный момент находимся в функции потока во время выполнения. После этого поток отменяется, а ресурсы возвращаются с помощью функции «pthread_join» в main(). Система снова спит на 10 секунд.

После этого поток отменяется, а ресурсы возвращаются с помощью функции «pthread

Оператор печати показывает, что мы находимся в главном и программа заканчивается.

Оператор печати показывает, что мы находимся

Пример 2

Давайте рассмотрим еще один новый пример использования функции pthread_cancel в программировании на C. Итак, программа запущена с добавлением файлов заголовков, т.е. стандартного ввода-вывода, стандарта Unicode, заголовка system-types и библиотеки потоков POSIX. Глобальная переменная count целочисленного типа инициализируется 0 в начале этой программы. Объект pthread_t с именем «thr» объявлен глобальным и будет использоваться как временный поток.

Когда функция main() создает первый поток

Когда функция main() создает первый поток, т. е. th1, она вызывает функцию Thread1 и аргумент-указатель. Вы должны игнорировать оператор printf для печати значения счетчика, так как он бесполезен. Оператор «пока» используется для обеспечения того, чтобы Thread1 вызывался и выполнялся до тех пор, пока цикл не прервется. Итак, поток заснет на 10 секунд и выведет, что мы работаем в Thread1. Переменная count увеличивается, и теперь она равна 1. Оператор if будет выполнен, когда значение count равно 2. Таким образом, управление переходит к Thread2.

Временный объект потока сохраняет идентификатор Thread2, используя pthread_self. Он также печатает, что мы находимся в Thread2 и спим 10 секунд. Затем управление переходит к Thread1, засыпает на 10 секунд, распечатывает сообщение и увеличивает счетчик, т. е. теперь 2. Будет вызван и выполнен Thread2. Оператор «if» будет выполнен, а Thread2, т.е., будет отменен с использованием временного объекта «thr». Функция pthread_exit также останавливает Thread1.

Два локальных потока были объявлены с помощью ключевого

Вот функция main(), с которой начнется выполнение. Два локальных потока были объявлены с помощью ключевого слова POSIX «pthread_t», т. е. th1 и th2. Оператор печати показывает нам, что мы создаем 1 -й поток, а функция сна переводит нашу систему в спящий режим на 10 секунд. Функция «pthread_create» переводит объект в поток 1, т. е. th1, для создания потока «Tread1». Теперь вызывается функция Thread1. Следующий оператор печати показывает, что создается второй поток, и система перейдет в спящий режим на следующие 10 секунд.

Читайте также:  Что такое анонимный прокси Java?

Функция «pthread_create» снова здесь для той же цели, т. е. для создания Thread2, т. е. с использованием th2. После выполнения обоих потоков функция «pthread_join» удостоверится, что вызванный поток завершен и завершен, чтобы он мог забрать все ресурсы, назначенные этому потоку. Здесь две функции pthread_join() используются отдельно для Thread1 и Thread2. Программа снова использует метод sleep, чтобы заснуть в течение следующих 10 секунд, а оператор print сообщает нам, что мы вернулись в main и программа здесь заканчивается.

create» снова здесь для той же цели

После компиляции и запуска этого кода функция main() начала выполняться, как показано ниже. Он собирается создать Thread1 через 10 секунд.

После компиляции и запуска этого кода функция main()

Thread2 будет создан функцией main() после 10 секунд сна.

Thread2 будет создан функцией main

Оба потока работают, так как счетчик равен 0.

Оба потока работают, так как счетчик равен

Потоки снова запускаются, так как счетчик равен 1.

Потоки снова запускаются, так как счетчик равен 1

После того, как счетчик приблизится к значению 2, сначала будет отменен поток 2.

После того, как счетчик приблизится к значению 2

Идет к Thread2 и отменяет его. Управление перешло к Thread1 и завершило его. После этого функция main() завершается.

Управление перешло к Thread1 и завершило его

Вывод

Это руководство было полностью посвящено функции POSIX pthread_cancel() для отмены потока в программе. Для этого мы также использовали функцию pthread_create для создания потока, функцию pthread_join() для обеспечения завершения потока, функцию pthread_exit для выхода из потока и функцию pthread_self() для получения идентификатора потока. нить. Мы надеемся, что это будет очень полезно для каждого пользователя C.

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