C++ Academy · Oppitunti

std::thread: liittyminen ja irrottaminen

Käynnistä säikeitä std::threadillä ja valitse join- ja detach-toimintojen välillä.

Oppitunti 1/414 vaihetta

std::thread: liittyminen ja irrottaminen on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

std::thread-luokka

<thread>-otsake toi säikeistyksen standardikirjastoon C++11:ssä. Jokainen std::thread-ilmentymä edustaa yhtä käyttöjärjestelmän säiettä.

Säikeen käynnistäminen

Välittäkää konstruktorille kutsuttava olio, kuten funktio, lambda tai funktoriobjekti. Säie aloittaa suorituksen välittömästi.

#include <thread>
#include <iostream>

void worker() { std::cout << "running on thread\n"; }

int main() {
    std::thread t(worker);
    t.join();    // wait for it to finish
}

Argumenttien välittäminen

Välittäkää argumentit kutsuttavalle oliolle konstruktorin kautta.

std::thread t([](int n) { std::cout << n; }, 42);
t.join();

Välittäminen viitteenä

Käyttäkää std::ref-funktiota argumenttien välittämiseen viitteinä. Ilman sitä säie saa argumenteista kopiot.

int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter;   // 1

join(): suorituksen valmistumisen odottaminen

Kutsukaa join()-funktiota, jotta kutsuva säie odottaa kohdesäikeen valmistumista. Join-kutsun jälkeen säiettä ei voi enää yhdistää.

detach(): suorittaminen itsenäisesti

Kutsukaa detach()-funktiota, jotta säie suoritetaan itsenäisesti. Se jatkaa suoritustaan std::thread-olion tuhoutumisen jälkeen. Käyttöjärjestelmä vapauttaa resurssit säikeen päättyessä.

std::thread t([]() { /* background work */ });
t.detach();   // we no longer track it

joinable()

Tarkistakaa, voidaanko säie yhdistää tai irrottaa. Yhdistettyä tai irrotettua säiettä ei voi enää yhdistää.

Join-kutsun unohtaminen: ohjelman päättyminen

Jos std::thread-olio tuhotaan sen ollessa yhä yhdistettävissä, ohjelma kutsuu std::terminate-funktiota. Kutsukaa aina join()- tai detach()-funktiota ennen tuhoamista.

RAII-kääre

Kirjoittakaa pieni RAII-kääre, joka yhdistää säikeen destruktorissaan. Voitte myös käyttää std::jthread-luokkaa (C++20), joka yhdistää säikeen automaattisesti.

#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyed

Laitteiston samanaikaisuus

Selvittäkää laitteiston säikeiden määrä kutsulla std::thread::hardware_concurrency(). Käyttäkää sitä säiepoolien koon määrittämiseen.

Säietunnukset

Jokaisella säikeellä on yksilöllinen tunnus. Hakekaa nykyisen säikeen tunnus kutsulla std::this_thread::get_id().

Säikeen nukuttaminen

Käyttäkää std::this_thread::sleep_for(duration)-funktiota nykyisen säikeen keskeyttämiseen.

#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);

Pikatarkistus

Mitä tapahtuu, jos yhdistettävissä oleva std::thread-olio tuhotaan ennen kuin join()- tai detach()-funktiota kutsutaan?

Kertaus

Käynnistäkää säikeet std::thread-olion ja kutsuttavan olion avulla. Kutsukaa aina join()- tai detach()-funktiota ennen säieolion tuhoamista — tai käyttäkää C++20:n std::jthread-luokkaa, joka yhdistää säikeen automaattisesti.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”std::thread: liittyminen ja irrottaminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “std::thread: liittyminen ja irrottaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”std::thread: liittyminen ja irrottaminen”?

Käynnistä säikeitä std::threadillä ja valitse join- ja detach-toimintojen välillä. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”std::thread: liittyminen ja irrottaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. std::thread: liittyminen ja irrottaminen
  2. std::mutex, lock_guard ja unique_lock
  3. Ehtomuuttujat ja työntekijämallit
  4. std::async- ja std::future-perusteet
← Takaisin: C++ Academy