Многопоточность — это концепция запуска нескольких потоков выполнения в рамках одной программы. Это очень полезная функция в таких языках программирования, как 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++ — мощная концепция, которая позволяет разработчикам создавать программы, способные выполнять несколько задач одновременно. Используя класс потоков, предоставляемый библиотекой, разработчики могут создавать, управлять и контролировать несколько потоков. Многопоточность может использоваться для повышения производительности, повышения скорости отклика и преодоления ограничений системных ресурсов. Однако из-за трудностей, связанных с работой с многопоточный программы, разработчики должны быть осторожны и использовать соответствующие методы синхронизации, чтобы избежать состояния гонки.