Как использовать многопоточность в C++

Kak Ispol Zovat Mnogopotocnost V C



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

Многопоточность это как многозадачность. Это означает, что два или более потока выполняются одновременно. В такой программе каждый компонент называется потоком, и каждый поток указывает уникальный путь выполнения. Нет встроенной поддержки многопоточный программы до C++ 11. Вместо этого эта функция полностью предоставляется операционной системой.







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



Создание потоков в C++

Чтобы создать поток в C++, мы используем станд::поток класс, включенный во встроенную библиотеку потоков. А вызываемый передается в качестве аргумента конструктору объекта класса станд::поток для создания нового потока. Код, который выполняется, когда поток активен, называется вызываемый . Когда мы строим станд::поток объект, устанавливается новый поток, который вызывает код, предоставленный вызываемый быть запущенным. Вызываемый можно определить с помощью этих трех методов.



Метод 1: указатель функции

Вызываемый функции, использующие указатель функции, могут быть определены следующим образом.





аннулировать function_call ( параметры )

Когда функция построена, объект потока, содержащий функцию, создается следующим образом:



std::thread thread_obj ( function_call, параметры ) ;

Метод 2: функциональный объект

При использовании функционального объекта мы пользуемся идеей перегрузки операторов. Код, который необходимо выполнить во время формирования потока, содержится в перегруженной функции.

класс Object_class {
пустой оператор ( ) ( параметры )
{
// код для выполнения
}
} ;
std::thread thread_object ( Класс_объекта ( ) , параметры )

Метод 3: лямбда-выражение

Вызываемый функции, использующие лямбда-выражение, могут быть определены следующим образом.

авто ф = [ ] ( параметры ) {
// код для выполнения
} ;
std::thread thread_object ( ф, параметры ) ;

Пример многопоточности в C++

#include <иопоток>
#include <поток>
использование пространства имен std;

недействительным func_thread ( инт N )
{
для ( я = 0 ; я < Н; я++ ) {
cout << 'Поток 1 :: callable => Использование указателя на функцию \n ' ;
}
}

класс thread_obj {
публичный:
пустой оператор ( ) ( инт н ) {
для ( я = 0 ; я < н; я++ )
cout << 'Thread 2 :: callable => Использование функционального объекта \n ' ;
}
} ;

внутренний основной ( )
{

авто ф = [ ] ( инт н ) {
для ( я = 0 ; я < н; я++ )
cout << 'Поток 3 :: callable => Использование лямбда-выражения \n ' ;
} ;

нить th1 ( func_thread, 2 ) ;

нить th2 ( thread_obj ( ) , 2 ) ;

нить th3 ( ф, 2 ) ;

th1.присоединиться ( ) ;

th2.присоединиться ( ) ;

th3.присоединиться ( ) ;

возвращаться 0 ;
}

В приведенном выше коде мы разработали три потока с тремя отдельными вызываемые — указатель на функцию, объект и лямбда-выражение. Каждый поток запускается как два отдельных экземпляра. Три потока активны одновременно и по отдельности, как указано в выходных данных.

Выход

Преимущества и недостатки многопоточности

Больше работы можно сделать быстрее благодаря многопоточность . Это связано с тем, что он позволяет нескольким потокам выполнять различные задачи одновременно. Многопоточность позволяет программистам выполнять сетевые действия, обрабатывать фотографии или видео и выполнять сложные вычисления, не замедляя остальную часть приложения. Многопоточность помогает сделать пользовательские интерфейсы более отзывчивыми. Запустив код, который изменяет экран, в отдельном потоке, поток пользовательского интерфейса остается свободным для выполнения других задач, таких как ответ на ввод пользователя. Это приводит к более плавным и быстрым пользовательским интерфейсам.

Однако существуют некоторые ограничения на использование многопоточность . Одна из основных проблем при работе с многопоточный программ избегает условий гонки. Состояние гонки — это ситуация, когда два или более потока пытаются одновременно получить доступ к одному и тому же общему ресурсу, что приводит к непредсказуемому поведению. Чтобы избежать состояния гонки, разработчики используют методы синхронизации, такие как мьютексы, семафоры и барьеры.

Заключение

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