Мултитхреадинг у Ц++ је функција која омогућава обављање више задатака истовремено у исто време. Нит је радна јединица одређеног процеса који се извршава. Бројне нити се извршавају независно једна од друге у исто време да би извршиле вишенитност.
Како имплементирати вишенитност у Ц++
Програм са више нити има два или више делова који имају тенденцију да се покрећу истовремено, сваки део је познат као нит и има различиту путању за извршење. Бројне нити се извршавају независно једна од друге у исто време да би извршиле вишенитност.
Предуслови за вишенитност у Ц++
У Виндовс-у, функције које се односе на нити могу да се извршавају у Ц++ 11 и напредним верзијама. Док користите Дев-Ц++ компајлер, он је подразумевано на верзији Ц++ 3, тако да га треба ручно променити у верзију Ц++ 11. ГНУ Ц++11 окружење се може изабрати променом стандардних поставки језика.
Отворите Дев-Ц++ компајлер и идите на „Алати“ на траци задатака. Изаберите „Опције компајлера“, а затим изаберите „Подешавања“, кликните на блок „Генерација кода“ и појавиће се листа команди. Изаберите ГНУ Ц++11 из „Лангуаге Стандард(-стд)“, а затим кликните на ОК. Сада је овај компајлер спреман да подржи операције нити.
Преузмите библиотеке са ГитХуб-а и ставите их у фасциклу либ компајлера Цпп. Позовите ове библиотеке у програму користећи #инцлуде “мингв.тхреад.х” и <тхреад> датотеке заглавља, испод је њихова синтакса:
стд::тхреад тхреад_објецт ( позвати ) ;
стд::тхреад подржава #инцлуде “мингв.тхреад.х” датотека заглавља у Ц++11. То је класа нити и представља једну нит. Нова нит се креира помоћу стд::тхреад и њој се прослеђује позивна нит. Цаллабле је извршни код који се извршава када се нит покрене. Позив може бити било који од три типа која су наведена у наставку:
Када је објекат креиран, он покреће нову нит, која извршава код у позиваном.
Покретање нити помоћу Фунцтион Објецт
Функцијски објекат се може користити као позив за покретање нити, а оператор преоптерећења () га чини позиваним:
класа функција_објект_класа {воид оператор ( ) ( парамс )
{
Изјаве;
}
}
стд::тхреад тхреад_објецт ( фунцтион_објецт_цласс ( ) , парамс )
Функција преоптерећења је обезбеђена конструктору као први објекат, а искази као други објекат.
Покретање нити помоћу показивача функције
Дефинисан је показивач функције, а затим се користи као позив за покретање нити:
воид фунцтион_цалл ( парам ){
Изјаве;
}
стд::тхреад тхреад_обј ( функција_позив, параметри ) ;
Аргументи које треба пренети пишу се иза назива функције.
Покретање нити помоћу Ламбда експресије
Објекат нити се може покренути коришћењем ламбда као позивајућег.
// Дефинишите ламбда изразауто ф = [ ] ( парамс )
{
Изјаве;
} ;
стд::тхреад тхреад_објецт ( ф, парамс ) ;
Ламбда израз је дефинисан и у њему се позивају параметри да би се покренула нит.
У неким случајевима, нит мора да се заустави пре него што почне да извршава следећу команду. Тхе стд::тхреад::јоин () функција се користи за чекање да се нит заврши. На пример, у случају да доделимо задатак ГУИ нити, треба да сачекамо време његовог завршетка да бисмо прво правилно учитали ГУИ, а затим би дошло до извршења следеће команде.
инт маин ( ){
стд::тхреад т1 ( позвати ) ;
т1.јоин ( ) ;
Изјаве;
}
Пример
Ово је програм који се извршава за обављање вишенитног рада користећи сва три позивана. Три различите позивне команде извршавају своје команде истовремено три пута, а да их међусобно не прекидају:
#инцлуде <иостреам>#инцлуде <нит>
користећи простор имена стд;
воид фоо ( инт З )
{
за ( инт и = 0 ; и < З; и++ ) {
цоут << „Нит користи функцију“
' показивач као позивљив \н ' ;
}
}
класа тхреад_обј {
јавно:
воид оператор ( ) ( инт к )
{
за ( инт и = 0 ; и < Икс; и++ )
цоут << „Нит користи функцију“
' објекат који се може позвати \н ' ;
}
} ;
// главни код
инт маин ( )
{
цоут << 'Нити 1 и 2 и 3'
'ради независно'
<< ендл;
тхреад тх1 ( фоо, 3 ) ;
тхреад тх2 ( тхреад_обј ( ) , 3 ) ;
ауто ф = [ ] ( инт к ) {
за ( инт и = 0 ; и < Икс; и++ )
цоут << „Тет користећи ламбда“
„израз као дозивљив \н ' ;
} ;
тхреад тх3 ( ф, 3 ) ;
тх1.јоин ( ) ;
тх2.јоин ( ) ;
тх3.јоин ( ) ;
повратак 0 ;
}
У овом програму се користе три које се могу позивати укључујући показивач на функцију, објекат функције и ламбда израз за истовремено покретање три нити. Нити 1, 2 и 3 штампају своје вредности истовремено, независно једна од друге, а да се не прекидају једна од друге. Штампају своје вредности три пута. Функција јоин() се користи за чекање да се нит заврши.
Излази све три нити су приказани независно и понављају се три пута. Свака нит чека да се друга прва заврши.
Закључак
Мултитхреадинг у Ц++ је функција која омогућава обављање више задатака истовремено у исто време. Програм са више нити има два или више одељка који се могу покренути истовремено, сваки део је познат као нит и има засебну путању за извршење. Постоје три које се могу позвати за покретање нити, показивачи функција, функцијски објекти и ламбда изрази. Они омогућавају вишенитност.