Несколько потоков на примере Pthread_join

Pthread_join Изучение

Поток — это подпроцесс, который обрабатывает определенную часть кода и владеет его буфером. В этом руководстве мы обсудим «pthread_join» и некоторые из его примеров. Набор потоков — это набор потоков, которые выполняются в очень похожей операции. Внутри метода поток представляет собой отдельный последовательный поток. Потоки часто называют несерьезными процессами, поскольку они имеют несколько общих характеристик процессов. Потоки, в отличие от процессов, на самом деле не автономны друг от друга, поэтому они связывают свои сценарии, информацию и службы ОС, такие как открытые документы и триггеры, с другими потоками. Выполнение pthread можно получить через компилятор gcc. Прежде чем идти дальше, вы должны понять две концепции многопоточности POSIX, которые мы будем использовать в сегодняшней теме.

Pthread_create

Когда бы ни запускался многопоточный код, в нем работает только один процесс, который выполняет операцию main () программы. У этого потока есть идентификатор процесса, и теперь он является заполненным потоком. Для создания нового потока в скрипте необходимо использовать метод pthread_create ().

Pthread_join

Для потоков метод pthread_join () идентичен ожиданию функций. Вызывающий поток блокируется до завершения потока со спецификатором, эквивалентным первому оператору.

Установите компилятор GCC

При работе в системе Linux у вас должен быть установлен какой-нибудь компилятор для компиляции кода C. Наиболее рекомендуемый — компилятор GCC. Поэтому войдите в систему из системы Linux и откройте консольный терминал, используя «Ctrl + Alt + T». Вы также можете открыть его из строки поиска в области действий. Теперь терминал открыт, выполните следующую команду установки, чтобы компилятор «gcc» установил его. Добавьте пароль своей учетной записи по запросу и нажмите клавишу «Ввод». Теперь компилятор gcc установлен; мы попробуем несколько примеров, чтобы развить концепцию «pthread_join».

sudo apt install gcc

При работе в системе Linux у вас должен быть установлен какой-нибудь

Пример 1

Мы должны создать новый файл «one» в редакторе GNU Nano с расширением «c». Это потому, что мы будем работать над языком C. Попробуйте выполнить приведенную ниже инструкцию.

nano one.c

Введите показанный ниже сценарий в файл nano. Код состоит из некоторых библиотек, которые будут использоваться для многопоточности POSIX, особенно «pthread.h». Мы создали метод «Поток». Поток засыпает на 1 секунду и печатает выписку. После этого основная функция была создана. Переменная «id» использовалась как тип «pthread_t» для распознавания потока. Затем будет выполнен оператор печати, и будет создан поток POSIX с использованием функции «pthread_create». Эта функция имеет 4 значения аргумента. Один из них — это указатель на переменную id, а третий — на выполняемую функцию Thread. Все остальные по умолчанию. Был использован другой оператор печати, и основной метод завершился.

Читайте также:  Как сделать анимированный GIF в Ubuntu?

Введите показанный ниже сценарий в файл nano

Сохраните файл nano и выйдите, используя «Ctrl + S» и «Ctrl + X» соответственно. Скомпилируем код с помощью компилятора «gcc». Но убедитесь, что на этот раз вы должны использовать в команде флаг «-lpthread». В противном случае код не будет компилироваться и выполняться. Выполните следующий запрос.

gcc one.c –lpthread

Теперь запустите сценарий с помощью инструкции «a.out», как показано ниже. Всякий раз, когда код был выполнен, основная функция работает первой. Итак, оператор печати был выполнен, и на терминале отобразилось «Перед потоком». Затем была выполнена функция «pthread_create», и она создала новый поток, который использует функцию «Thread». После этого метод «pthread_join» был использован для перемещения элемента управления в функцию «Thread». В методе «Thread» программа находится в спящем режиме на 1 секунду, а затем выполняет оператор печати, из-за чего терминал отображает «Within Thread». После выполнения функции «Резьба» элемент управления снова переместился в основную функцию. И оператор печати в основной функции был выполнен как «After Thread».

./a.out

Пример 2

Возьмем еще один пример функции «pthread_join». На этот раз мы не будем использовать значения по умолчанию в качестве аргументов для потока. Мы присвоим потоку правильные значения. Создайте еще один файл «two.c» в редакторе nano, который будет использоваться для скрипта языка C следующим образом:

nano two.c

Запишите в редакторе приведенный ниже код C. Мы определили функцию «Thread» без какой-либо реализации. Основная функция запускается с указанием некоторых целочисленных переменных «i1» и «i2». Эти две переменные целочисленного типа будут использоваться как дескрипторы. Были использованы два идентификатора типа «pthread», «t1» и «t2», и другие переменные символьного типа. Две функции «pthread_create» указаны для создания двух потоков по отдельности с использованием идентификатора потока и «сообщений» в качестве их параметров. Функция «Thread» определяется как функция потока, в которую были переданы параметры. Метод «Thread» примет аргументы и распечатает сообщение. Затем используются два метода pthread_join для ограничения текущей функции. Два оператора печати покажут несколько сообщений, и основная функция завершится.

Читайте также:  Использование автоматизации для увеличения веб-трафика

Запишите в редакторе приведенный ниже код C

Скомпилируйте файл «two.c» с «gcc» вместе с флагом «-lpthread» следующим образом:

gcc two.c -lpthread

Давайте выполним код с помощью приведенной ниже команды в консоли. Вывод отображает результат первых двух операторов печати основной функции как «Поток 1» и «Поток 2». Затем, в связи с созданием потоков, управление переходит к функции «Thread». После выполнения метода «Thread» он возвращается к основной функции, и два других оператора печати выполняются.

./a.out

Заключение

Помимо реальной машины, поток обычно разделяет свое хранилище с несколькими другими потоками (хотя для задач у нас обычно есть полюсные зоны хранения для каждого из них). Все они имеют ссылки на очень идентичные глобальные переменные, пространство кучи, дескрипторы документов и т.д., Поскольку они совместно используют хранилище.

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