Како имплементирати вишенитност у Ц++

Kako Implementirati Visenitnost U C



Мултитхреадинг у Ц++ је функција која омогућава обављање више задатака истовремено у исто време. Нит је радна јединица одређеног процеса који се извршава. Бројне нити се извршавају независно једна од друге у исто време да би извршиле вишенитност.

Како имплементирати вишенитност у Ц++

Програм са више нити има два или више делова који имају тенденцију да се покрећу истовремено, сваки део је познат као нит и има различиту путању за извршење. Бројне нити се извршавају независно једна од друге у исто време да би извршиле вишенитност.







Предуслови за вишенитност у Ц++

У Виндовс-у, функције које се односе на нити могу да се извршавају у Ц++ 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 штампају своје вредности истовремено, независно једна од друге, а да се не прекидају једна од друге. Штампају своје вредности три пута. Функција јоин() се користи за чекање да се нит заврши.


Излази све три нити су приказани независно и понављају се три пута. Свака нит чека да се друга прва заврши.

Закључак

Мултитхреадинг у Ц++ је функција која омогућава обављање више задатака истовремено у исто време. Програм са више нити има два или више одељка који се могу покренути истовремено, сваки део је познат као нит и има засебну путању за извршење. Постоје три које се могу позвати за покретање нити, показивачи функција, функцијски објекти и ламбда изрази. Они омогућавају вишенитност.