Многопоточность в примере C ++ | Учебное пособие по многопоточности C ++

Учебное пособие по многопоточности в C ++ — пример сегодняшней темы. Многопоточность — это тип модели, которая во время выполнения позволяет нескольким потокам существовать в контексте процесса, так что они выполняются независимо, но совместно используют ресурсы процесса. Поток — это наименьшая последовательность программных инструкций, которой может управлять планировщик. Параллельное выполнение потоков может повысить эффективность программ.

Многопоточность в C ++

Многопоточность — это научно-техническая форма многозадачности. многозадачность — это характеристика, позволяющая компьютеру запускать две или более программы одновременно. В основном существует два типа многозадачности:

1) многозадачность на основе процессов

2) многозадачность на основе потоков.

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

Многозадачность на основе потоков имеет дело с одновременным выполнением частей одной и той же программы.

Многопоточная программа содержит два или более элементов, которые могут выполняться одновременно. Каждая часть такой программы называется потоком, и каждый поток определяет отдельный путь выполнения.

Поддержка многопоточности была введена в C + 11. std :: thread — это класс потока, описывающий один поток в C ++.

Если мы хотим запустить поток, нам нужно создать новый объект потока и передать вызываемый исполняемый код (т.е. вызываемый объект) в конструктор объекта. После создания объекта новый поток.

# Многопоточность в разных системах

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

Многопоточность в одноядерных системах делит время между разными потоков.

Операционная система отправляет процессору определенное количество инструкций из разных потоков. Потоки выполняются не одновременно, а в разные временные интервалы.

Операционная система только преувеличивает их одновременное выполнение. Эта функция операционной системы называется многопоточностью.

# Синтаксис для создания потока

Важно включить следующее заголовочный файл.

 #include  

Чтобы создать поток, мы должны создать объект класса Thread.

 thread thread_1; 

# Пример создания и инициализации потока

См. следующий файл кода.

 #include  #include  using namespace std; void threadFunction () {cout  

См. результат.

Здесь, в выходных данных, мы видим ошибку. Это потому, что основной поток завершается до завершения fun_1.

Если мы хотим удалить ошибку, мы можем использовать функцию join (), поскольку она будет ждать завершения всех запущенных потоков перед завершением основного потока.

# Присоединение к потокам

Обычно мы объединяем два или более потоков с помощью функции join () класса потока.

Функция выполняется только тогда, когда все потоки, за исключением основного потока, завершены. Это означает, что основной поток будет ждать, пока дочерний поток не завершит свое выполнение.

Как только функция join () что-либо возвращает, потоки становятся недоступными для присоединения.

Поток не может быть присоединен, если он создан по умолчанию или перемещен/назначен другому потоку, или при вызове функции-члена join () или detach () .

Чтобы проверить, присоединен ли поток или нет, мы используем функцию joinable () . Она возвращает истину, если функция присоединена, и ложь, если функция f unction не соединяется.

#Detaching thread

Мы используем функцию detach () для отсоединения потоков.

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

# Передача аргументов потоку

Мы можем используйте функцию с параметрами для инициализации потока. См. Следующий пример кода.

 void fun_1 (int x, float y, char * z) {cout  

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

 char * z = "AppDividend";  ветка var_1 (fun_1, 5, 4.2, z);  if (var1.joinable ()) var_1.join (); 

Каждый поток имеет уникальный идентификатор, который идентифицируется с помощью идентификатора потока.

# Пример программы многопоточности на C ++

См. следующий код.

 #include  #include  с использованием пространства имен std  ; void threadFunc () {cout  

См. результат.

# Создайте три потока и распечатайте сообщение из каждого потока на C ++

См. следующий код.

 #include  #include  #include  using namespace std; #define NUM_THREADS 5void * Printmsg (void * thread_id) {long t_id; t_id = (long) thread_id;  cout  

См. вывод.

Наконец, многопоточность в Пример C ++ | Учебное пособие по многопоточности C ++ окончено.

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